BLA
BLA (Blind LLM Agents) is the open-source Blue Defense MCP and CLI built to protect software artifacts against automated AI reverse-engineering workflows.
Network toolkit with 17+ engines, MCP server for AI integration, smart config rotation, data-phase drop detection, and country-aware routing. Terminal-first. Windows + Linux
SecurityPython · GoGitHub @kiacoderOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Loading the full README. The saved excerpt is shown below.
Blackout Kit (blackout-kit) — Network Security & Bypass Toolkit
A network security and bypass toolkit for Windows and Linux. 17+ engines, MCP-integrated diagnostics, country-aware routing, smart config rotation, encrypted vault, and self-healing crash recovery.Read the full README ↗██████╗ ██╗ █████╗ ██████╗ ██╗ ██╗ ██████╗ ██╗ ██╗ ████████╗
██╔══██╗ ██║ ██╔══██╗ ██╔════╝ ██║ ██╔╝ ██╔═══██╗ ██║ ██║ ╚══██╔══╝
██████╔╝ ██║ ███████║ ██║ █████╔╝ ██║ ██║ ██║ ██╗ ██║
██╔══██╗ ██║ ██╔══██║ ██║ ██╔═██╗ ██║ ██║ ██║ ██╗ ██║
██████╔╝ ███████╗ ██║ ██║ ╚██████╗ ██║ ██╗ ╚██████╔╝ ╚██████╔╝ ██║
╚═════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝
██╗ ██╗ █████╗ ████████╗
██║ ██╔╝ ██║ ╚══██╔══╝
█████╔╝ ██║ ██║
██╔═██╗ ██║ ██║
██║ ██╗ █████╗ ██║
╚═╝ ╚═╝ ╚════╝ ╚═╝
Blackout Kit (blackout-kit) — Network Security & Bypass Toolkit
Blackout Kit Desktop is a separate Windows WPF/C# product in early prototype. Its current milestone is a read-only named-pipe snapshot view; it is not CLI parity and cannot connect/stop engines yet. See
desktop/README.mdanddesktop/CAPABILITY_COVERAGE.md.
A network security and bypass toolkit for Windows and Linux. 17+ tunnel engines plus a DNS resolver engine (35 providers), MCP-integrated diagnostics, country-aware routing, smart config rotation, encrypted vault, and self-healing crash recovery.
⚡ New in 1.9.0 — AmneziaWG, native
Obfuscated WireGuard with real junk-packet parameters (Jc/Jmin/Jmax, S1–S4, H1–H4), running entirely in userspace. No TUN device. No drivers. No admin rights. No sing-box patchset.
Verified against a live production server, not a lab: handshake registered ✅ · 1.5 MB transferred ✅ ·
curlthrough the tunnel returns the server's IP ✅ · YouTube 200 through both the SOCKS5 and HTTP proxies ✅.blackout settings set awg_config_file C://path//to//awg.conf blackout start awg -d # SOCKS5 :11080 · HTTP :11081 (system proxy)
Country profiles: 🇮🇷 Iran · 🇷🇺 Russia · 🇨🇳 China · 🇮🇶 Iraq · 🇬🇧 United Kingdom · 🇺🇸 United States · 🇪🇺 Europe
Every number below was measured on real hardware against real servers — not a lab mock.
| Claim | Evidence |
|---|---|
| AmneziaWG handshake works | Production server: fresh latest-handshake, 1.5 MB transferred, 784 packets on awg0 |
| Traffic really exits the server | curl -x http://127.0.0.1:11081 https://api.ipify.org → 185.215.244.95 (the server's own IP) |
| YouTube loads through the tunnel | https://youtube.com → 200 in 3.3 s, via HTTP proxy and SOCKS5 alike |
| Windows browsers work | System proxy is HTTP (WinINET cannot use SOCKS); Chrome needs no flags |
| No admin, no drivers | Userspace netstack; no elevation, no WinDivert, no TUN adapter |
| The test suite is green | 1,523 passed, 2 skipped |
| The servers are hardened | SSH key-only, fail2ban (68 brute-force attempts blocked on day one), ufw default-deny |
If a claim does not reproduce on your machine, that is a bug — open an issue with the output of
blackout doctor.
Standard userspace proxying needs no administrator rights. Starting an engine that exposes a local SOCKS5 or HTTP proxy, and pointing the system proxy at it, runs from an ordinary user account:
sudo.blackout config --setup-defender-exclusion and type yes.HKEY_CURRENT_USER.Engines in this userspace group are xray, hysteria2, tuic, and appsscript. The code confirms
that none of them appears in the elevation lists (ENGINES_REQUIRING_ADMIN and
_WINDOWS_ELEVATED_ENGINES) and none loads the WinDivert driver.
# Unprivileged quick start: a local SOCKS5/HTTP proxy, no elevation
blackout config add --prompt # paste the URI you already have (not echoed, not in shell history)
blackout connect xray # start the userspace XRay proxy
Elevated privileges are opt-in. Blackout asks Windows for elevation (UAC), or requires root on Linux, only when you start an engine or feature that needs it:
| Capability | Engines or features | Why it needs elevation |
|---|---|---|
| Packet interception | gdpi (legacy GoodbyeDPI) | Captures and rewrites packets through the WinDivert driver. See WinDivert driver and Windows Defender |
| Virtual network interface | tun (Windows admin, Linux root), wireguard, openvpn, softether, ikev2 | Creates a tunnel adapter and changes routes |
| Launcher elevation on Windows | warp | Blackout elevates this engine on Windows even though it serves a local proxy. That is a launcher policy, not a packet-level requirement |
| Firewall rules on Linux | kill_switch setting (off by default) | Programs firewall tables; the Linux kill switch runs only as root |
Elevation is therefore not limited to packet-level engines and TUN. It also covers VPN adapter engines,
the Windows warp launch policy, and the Linux kill switch. The userspace guarantee above holds only
for the engines listed in its group.
Userspace does not mean private. A local proxy still sends traffic to whichever upstream you configure. See NETWORK_PRIVACY.md for every outbound connection and SECURITY.md for the full threat model.
Blackout Kit is a local coordinator for bypass engines and user-supplied proxy or VPN configurations.
It does not operate remote VPN or proxy servers. Instead, it helps users:
Design goals in the current release line:
If you are here to use Blackout Kit, start with the user guide:
If you are here to maintain, package, test, or contribute to Blackout Kit, start with:
The README stays high-level. The two guides go deeper in separate directions on purpose.
Blackout Kit 1.8.0 currently includes:
CustomTkinterblackout isp list, transient --profile ir-mci|ir-irancell|... carrier presets, an interactive carrier picker on bare blackout connect (with ASN auto-detect), a one-connection --sni-spoof <domain> flag, and blackout tune fragment which pairs a clean IP with a TLS fragmentation setting measured through real handshakes; all overrides ride the temporary mechanism and never rewrite saved settingsblackout start socks-tunnel supervises the Go blackout-core daemon over its local IPC channel and exposes a loopback SOCKS5 tunnel with fake-SNI rewrite and randomized SNI-boundary segmentation (v2_tunnel_port, default 18080). Build the daemon with go -C engine/v2 build -o bins/blackout-core.exe ./cmd/blackout-core or set BLACKOUT_CORE_BINblackout snapshot, deterministic blackout operator recommend with safety classes, sanitized blackout support-bundle, local event journal, and an opt-in loopback SSE event stream. Deterministic core logic, not an embedded AI model; external AI systems consume it via MCPProxyOverride| Platform | Status | Notes |
|---|---|---|
| Windows 10/11 x64 | Full support | Broad engine catalog, GUI, system proxy integration, split-tunnel proxy bypass patterns, DLL runtimes, and Windows-native VPN paths |
| Linux x86_64 | Partial support | Supported paths: xray, tun, hysteria2, tuic through the managed blackout-engine runner |
| macOS | Not supported | No current runtime path |
| ARM devices | Not supported | Current binaries and runtime assumptions target x64 / x86_64 only |
Linux does not support the Windows SNI injection path, GoodbyeDPI, Windows VPN engines, the desktop GUI, or Windows system-proxy bypass rules.
Linux currently supports:
blackout connect xrayblackout connect tunblackout connect hysteria2blackout connect tuic| Engine | Category | Runtime path | Exposes local proxy? | Notes |
|---|---|---|---|---|
sni | DPI bypass stack | blackout_core.dll | Yes | Uses the native SNI component plus XRay listeners |
xray | Proxy core | blackout_core.dll | Yes | Supports VLESS, Trojan, VMess on Windows; REALITY is client-side VLESS support |
gdpi | TCP handling | goodbyedpi.exe or experimental native DLL path | No | legacy is the stable default; native is experimental |
psiphon | VPN/proxy client | blackout_warp.dll | Yes | Current runtime is DLL-backed |
warp | VPN/proxy client | blackout_warp.dll | Yes | Current runtime is DLL-backed |
tun | System tunnel | blackout_core.dll | No | Windows TUN requires admin rights and the WinTUN driver; the driver is never downloaded or installed automatically, and readiness does not claim the driver is loaded — sing-box startup is the final check |
tor | Proxy client | tor.exe | Yes | Uses a user-supplied Tor runtime |
mhrv | HTTP relay | blackout_core.dll | Yes | Embedded HTTP relay; HTTPS CONNECT is intentionally unsupported |
ikev2 | Windows native VPN | Windows RAS | No | Uses saved built-in VPN settings |
wireguard | VPN | Windows runtime path | No | Requires a supplied .conf file |
openvpn | VPN | Windows runtime path | No | Requires a supplied .ovpn file |
softether | VPN | Windows runtime path | No |
| Engine | Supported on Linux? | Runtime path | Notes |
|---|---|---|---|
xray | Yes | blackout-engine | Requires a direct supported upstream config |
tun | Yes | blackout-engine | Requires root and Linux networking prerequisites |
hysteria2 | Yes | blackout-engine | Uses sing-box proxy mode through the runner |
tuic | Yes | blackout-engine | Uses sing-box proxy mode through the runner |
sni, gdpi, psiphon, warp, legend, Windows VPN engines | No | — | Windows-only or otherwise unsupported on Linux |
legend means two related but different thingsBlackout Kit currently uses legend in two places:
blackout mode legendblackout connect legend or blackout start legendThe security mode changes local XRay and legacy-GDPI policy. The engine target starts a Tor + SNI + XRay stack. The names overlap, but the behaviors are not identical.
Download blackout.exe from the GitHub Releases page.
This is the easiest path for Windows users who want the packaged app.
Notes:
~/.blackout-kit/Every release publishes checksums.txt (SHA-256 for each release asset) and blackout.exe.sha256.
install.ps1 in the repository root downloads the latest blackout.exe, checks it against that
checksum before anything is installed, and refuses to install if no checksum is published. Run it
as a file: powershell -ExecutionPolicy Bypass -File .\install.ps1. A failed check exits non-zero,
and piping the script into Invoke-Expression would end the shell that runs it.
To verify a manual download in PowerShell:
$base = "https://github.com/kiacoder/blackout-kit/releases/latest/download"
Invoke-WebRequest -UseBasicParsing -Uri "$base/blackout.exe" -OutFile blackout.exe
Invoke-WebRequest -UseBasicParsing -Uri "$base/checksums.txt" -OutFile checksums.txt
$line = Get-Content checksums.txt | Where-Object { $_ -match '\sblackout\.exe$' } | Select-Object -First 1
$expected = $line.Split(' ', [StringSplitOptions]::RemoveEmptyEntries)[0]
$actual = (Get-FileHash -Algorithm SHA256 .\blackout.exe).Hash
if ($actual.Trim() -ieq $expected.Trim()) { "OK: $actual" } else { "MISMATCH: expected $expected, got $actual" }
On Linux, or with GNU coreutils available:
curl -fLO https://github.com/kiacoder/blackout-kit/releases/latest/download/blackout-engine-linux-amd64
curl -fLO https://github.com/kiacoder/blackout-kit/releases/latest/download/checksums.txt
sha256sum --ignore-missing -c checksums.txt
The checksum comes from the same release as the file. It catches corrupted or substituted downloads, but on its own it cannot defend against a compromised release, which would change both files.
Every release asset — blackout.exe, blackout-engine-linux-amd64, blackout-source.zip,
checksums.txt, blackout.exe.sha256 — is covered by a signed SLSA build-provenance attestation
produced by this repository's own Actions workflow (.github/workflows/build.yml,
actions/attest-build-provenance@v2). Verify the file you downloaded against it:
# 1. Verify cryptographic provenance via GitHub Sigstore:
gh attestation verify blackout.exe --repo kiacoder/blackout-kit
# 2. Verify SHA-256 checksum. blackout.exe.sha256 holds "<hash> blackout.exe", so take the first field:
$expected = ((Get-Content .\blackout.exe.sha256) -split '\s+')[0]
(Get-FileHash -Algorithm SHA256 .\blackout.exe).Hash -ieq $expected
Get-FileHash emits uppercase hex, while .sha256 and checksums.txt use lowercase. Compare with
-ieq (or .ToLowerInvariant() on both sides). -ceq is case-sensitive and reports a false mismatch.
gh attestation verify blackout.exe --repo kiacoder/blackout-kit --format json | jq '.[0].verificationResult'
sha256sum -c checksums.txt
Provenance answers the question a digest cannot: it states which repository, commit, and workflow run
produced these bytes, signed by a short-lived Sigstore certificate. Releases tagged before this change
carry no attestation — for those, verify the checksum and compare it against an independent copy of
checksums.txt. See SECURITY.md for the full assurance matrix.
The installable core keeps GUI, packet capture, media, and torrent dependencies optional:
git clone https://github.com/kiacoder/blackout-kit.git
cd blackout-kit
python -m pip install .
blackout version
Feature extras are available when needed:
python -m pip install .[gui]
python -m pip install .[capture]
python -m pip install .[media]
python -m pip install .[torrent]
python -m pip install .[all]
The torrent extra uses the maintained libtorrent package on Linux Python 3.10–3.13 and is skipped on Windows and newer unsupported Python versions. Torrent commands report an actionable unavailable-feature message when the binding is unavailable. For contributor, test, and PyInstaller work, requirements.txt remains the portable all-feature development environment.
Then install the runtimes you actually need:
python blackout.py bins
python blackout.py bins download
Linux requires the blackout-engine runtime asset in bins/. Install the core package first; add [capture] only when packet capture is needed.
python3 -m pip install .
The core install does not pull in the Windows GUI, Scapy capture support, yt-dlp, or libtorrent.
Linux requires the blackout-engine runtime asset in bins/.
python3 -m pip install -r requirements.txt
mkdir -p bins
chmod +x bins/blackout-engine
python3 blackout.py version
The Linux runtime asset is produced by the repo CI and release pipeline as blackout-engine-linux-amd64, then used locally as bins/blackout-engine.
Current runtime expectations from code:
blackout_core.dll powers native Windows SNI, XRay, mhrv, TUN, and the experimental native GDPI pathblackout_warp.dll powers current Windows WARP and Psiphon runtime pathsblackout-engine powers the Linux managed runtime pathsgoodbyedpi.exe, tor.exe, openvpn.exe, and WireGuard/OpenVPN/SoftEther-related runtime piecesWindows
Linux x86_64
iproute2nftables or both iptables and ip6tablessudo for system tunnel, firewall, and repair actionsbins/blackout-engine present and executableStart with a safe overview, then let the local checklist identify what is needed:
blackout demo
blackout doctor --local-only
blackout capabilities
blackout route
blackout setup
blackout ready <engine>
blackout connect
blackout status
blackout setup is the beginner-friendly keyboard workflow. It can offer config
editing, settings review, and a download of only the selected engine's missing
runtime; each write, download, and connection remains explicit. blackout setup
is read-only in JSON, quiet, and other non-interactive modes. Use
blackout setup --connect only from an interactive terminal, after reviewing the
final plan.
blackout capabilities keeps the complete public engine catalog visible. Each
engine is reported as ready, blocked, or unsupported for the current local
platform:
The catalog is intentionally broader than any one platform's runtime subset.
Linux users should supply the managed runtime and a compatible direct upstream configuration before running the final steps:
python3 blackout.py setup
python3 blackout.py ready xray
sudo python3 blackout.py connect tun --background
Running blackout with no arguments opens a keyboard-navigable terminal chooser instead of doing anything automatically:
Blackout Kit — Choose How to Launch
> 🖥️ TUI Console Full-screen Blackout Console (arrow keys, live status)
🪟 Windows App Open the desktop launcher window
❌ Exit Quit Blackout Kit
↑↓ Move →/Space/Enter Select ←/Esc Back Ctrl+C Quit
q there returns to this chooser (with a confirmation when an engine is running). It is shown only when the tui extra is installed.CustomTkinter desktop GUI described in Windows desktop GUI; closing that window also returns here.blackout connect
blackout connect <engine>
blackout connect --background
blackout connect --iran
blackout connect --russia
blackout start <engine>
blackout start <engine> --russia
blackout emergency
blackout stop
blackout disconnect
blackout status
blackout status --watch
blackout demo
blackout capabilities [engine]
blackout route
blackout ready [engine]
blackout setup
blackout setup --connect
blackout config # keyboard config manager
blackout config edit # keyboard config manager
blackout config --setup-defender-exclusion # exclude only bins/windivert from Defender (asks you to type yes)
blackout config --remove-defender-exclusion # undo that exclusion (asks you to type yes)
blackout config list
blackout config validate
blackout config check-duplicates
blackout config compatibility
blackout config diff <setup>
blackout config add <uri>
blackout config replace <n> <uri>
blackout config import <url>
blackout config remove <n>
blackout config encrypt
blackout config decrypt
blackout config export --output setup.txt --force
blackout config import-setup <string> --force
blackout config profile-export --output profile.bkpf --stdin
blackout config profile-import profile.bkpf --stdin --force
blackout settings # keyboard settings editor
blackout settings edit # keyboard settings editor
blackout settings list
blackout settings get <key>
blackout settings set <key> <value>
blackout settings reset
The bare settings and config commands open keyboard-only editors in an interactive terminal. Use ↑/↓ to move, Enter, Space, or → to select, and ←/Esc to go back. Long lists show a bounded viewport that follows the selected row; mouse-wheel and mouse clicks are not used for selection. Setting edits are validated and saved immediately through the same settings API as the explicit commands. Config replacement asks for a new URI without displaying the old URI, so credentials are not exposed in the menu.
Plain setup exports contain credential-bearing URIs and require confirmation (or --force in automation). Portable profiles are authenticated and encrypted with a passphrase; use --prompt or --stdin so passphrases are never command-line arguments. Machine-readable output uses a versioned envelope, and supported read-only commands can be queried with --json.
The core package includes the CLI, local status/readiness, settings, config management, and local diagnostics. Install feature extras only when needed:
| Extra | Enables |
|---|---|
gui | Windows desktop app and tray dependencies |
capture | Scapy packet capture; Windows also requires Npcap and Linux requires libpcap |
media | yt-dlp media queue execution |
torrent | libtorrent queue execution on supported Linux Python versions |
all | All optional Python features |
Missing optional features return an actionable installation error instead of a traceback. blackout doctor is core-only by default; add --include-optional to inspect packet-capture prerequisites.
Automatic release downloads are staged and accepted only from approved HTTPS GitHub
release hosts when release metadata includes a matching SHA-256 digest. Downloaded
outputs are structurally checked before promotion, and verified output hashes are
recorded in bins/.provenance.json; use the local integrity checks to detect later
tampering. Existing binaries remain in place when verification fails.
Some cataloged engines still require a user-supplied or manual runtime. Those paths remain visible in the catalog, but are labeled manual/unverified rather than being presented as automatically authenticated downloads. Never paste credentials or raw proxy URIs into routine machine-readable output.
When Blackout Kit changes a local proxy, it records the exact target it owns. Cleanup restores or clears that state only while the current proxy still matches the recorded Blackout target. If another process changed the proxy afterward, Blackout Kit leaves that current state untouched.
Use --json for supported structured commands:
blackout --json version
blackout --json status
blackout --json config validate
blackout --json settings list
Each success or error is one compact JSON object with schema_version, ok, and either data or error. Secrets, raw proxy URIs, and credentials are omitted. Unsupported delegated commands reject --json before running. Streaming/watch output uses one JSON object per line.
Typer shell completion is built in:
blackout --install-completion
blackout --show-completion
The optional local startup benchmark measures fresh subprocess startup only and performs no network or system changes:
python scripts/benchmark_startup.py --json
To include packet-capture checks in diagnostics:
blackout doctor --include-optional
No network probe is implied by the core-only local checks.
blackout doctor --fix never changes Windows Defender settings. Defender exclusions are added only through the confirmed commands listed in the config section.
blackout doctor
blackout doctor --fix
blackout doctor --fix-av # same confirmed WinDivert-only exclusion as config --setup-defender-exclusion
blackout fix
blackout fix --preview
blackout fix --history
blackout fix --full-route-reset
blackout fix --full-stack-reset
blackout fix --flush-arp
blackout tools netfix
blackout tools netfix --preview
blackout tools vmcheck # VM detection + leftover state + recovery steps
blackout tools arp-flush
blackout scan
blackout tools ping [host]
blackout tools speedtest
blackout tools dns-bench
blackout tools dns-set <server>
blackout tools dns-flush
blackout dns # current resolvers + which catalogue pair they match
blackout dns list [--category sanctions|speed|extra]
blackout dns set <provider|ip> [--adapter <name>] [--flush/--no-flush]
blackout dns restore # undo the last change (DHCP / saved resolv.conf)
blackout dns flush
blackout dns bench [-d domain] [-n repeat]
blackout tools traceroute [host]
blackout tools scan-file <path>
blackout tools file-hash <path>
blackout tools mac status
blackout tools mac randomize [--adapter <name>] [--force]
blackout tools mac restore [--adapter <name>] [--force]
blackout tools cert-check <host[:port]>
blackout tools cert-check <host> --allow
blackout tools hotspot
blackout tools share-vpn
blackout network
blackout network scan
blackout network isp
blackout network auto
blackout network switch <ssid>
A tunnel can be perfectly healthy and still leak every domain you visit to the
carrier's resolver. blackout dns is a separate engine for that decision — it
switches the system resolver to a curated pair of addresses and can put the
machine back the way it was found.
The catalogue ships with three groups, 35 providers in all. The first two start with XDNS's own lists — the exact primary/secondary pairs that single-file Windows client switches between:
| Group | Provider | Primary | Secondary |
|---|---|---|---|
| sanctions | Shecan | 178.22.122.100 | 185.51.200.2 |
| sanctions | Electro | 78.157.42.100 | 78.157.42.101 |
| sanctions | Begzar | 185.55.226.26 | 185.55.226.25 |
| sanctions | Radar | 10.202.10.10 | 10.202.10.11 |
| sanctions | 403.online | 10.202.10.202 | 10.202.10.102 |
| sanctions | OpenDNS | 208.67.222.222 | 208.67.220.220 |
| speed | Yandex | 77.88.8.8 | 77.88.8.1 |
| speed | Cloudflare (+Security, +Family) | 1.1.1.1 / 1.1.1.2 / 1.1.1.3 | 1.0.0.1 / 1.0.0.2 / 1.0.0.3 |
| speed | 8.8.8.8 | 8.8.4.4 | |
| speed | DNS.SB, Control D, Level3, Vercara, Comodo, Gcore, Oracle Dyn, Wikimedia, DNS4EU | ||
| extra | Quad9 (+Unfiltered), AdGuard (+Family, +Unfiltered), CleanBrowsing (+Family), NextDNS, Mullvad, OpenDNS FamilyShield, Yandex Safe / Family, Alibaba, Tencent, 114DNS |
blackout dns list -v prints the one-line note for each provider. Both
addresses are written, primary first, so a dead primary falls through to the
secondary instead of to the DHCP server. dns set snapshots the resolvers it
replaced into ~/.blackout-kit/dns_state.json before touching anything;
dns restore puts them back (DHCP on Windows, the saved /etc/resolv.conf on
Linux, networksetup … Empty on macOS). Applying a resolver needs
Administrator / root — the command says so instead of failing silently.
The same catalogue is used by blackout tools dns-set <name>, and the Blackout
Console has a dedicated DNS screen (n).
blackout bins
blackout bins download
blackout bins download <key>
blackout bins update
blackout update
blackout update --apply
blackout gui
blackout mcp
blackout help
blackout help <topic>
blackout country
blackout country set <code>
blackout country reset
blackout split-tunnel list
blackout split-tunnel add <pattern>
blackout split-tunnel remove <pattern>
# Enterprise & Team (Roadmap Phase 7)
blackout enterprise # org, principals, device summary
blackout enterprise roles
blackout enterprise policy
blackout enterprise assign <name> <role> # viewer | operator | admin
blackout enterprise devices
blackout enterprise device-add <id> [--name <n>] [--platform <p>] [--status <s>]
blackout enterprise compliance [--framework gdpr|hipaa|soc2|all]
# Developer ecosystem (Roadmap Phase 8)
blackout tools plugins # list discovered plugins
blackout tools plugins run <name> --context '<json>'
blackout tools marketplace # installed plugins
blackout tools marketplace list
blackout tools marketplace search <query>
blackout tools marketplace refresh # fetch catalog (explicit egress)
blackout tools marketplace install <name> # SHA-256 verified
blackout tools marketplace remove <name>
blackout enterprise is local-first: the policy document is a distributable JSON file (optionally HMAC-signed), the device registry is a shared JSON file, and the compliance checks read the effective settings. Nothing is uploaded.
Embedding Blackout Kit from Python (the SDK):
from blackoutkit.sdk import Blackout
bk = Blackout()
bk.version # "1.8.0"
bk.engines() # ['auto', 'xray', 'sni', ...]
bk.readiness("xray") # {"engine", "ready", "checks"}
bk.metrics() / bk.connections(process="chrome", port=443) / bk.bandwidth()
bk.roles() / bk.policy() / bk.can("alice", "connect") # Phase 7
bk.devices() / bk.compliance("gdpr") # Phase 7
bk.connect() / bk.status() / bk.disconnect()
The SDK is a thin facade over the same internals the CLI uses, so the two can never disagree; typed exceptions derive from BlackoutError. A read-only REST API v2 (blackout api start, then /api/v2/events, /api/v2/webhooks, /api/v2/plugins, /api/v2/devices, /api/v2/compliance, and a /api/v2/ws/events WebSocket stream) exposes the same data locally and is loopback-only by default.
---
## Operator: structured observability (Blackout Operator foundation)
Blackout Kit exposes clean structured state, events, and recommendations so
external AI systems (ZCode, GLM, Claude, ChatGPT, avatar hosts, or any MCP
client) can reason over it. The Operator layer is deterministic core logic —
**not an embedded AI model** — and nothing is ever uploaded.
```bash
blackout snapshot # canonical local state (add --json for stable JSON)
blackout operator status # live operator view (add --watch)
blackout operator recommend # deterministic recommendations with safety classes
blackout operator actions # documented action catalog
blackout events recent # sanitized local event journal
blackout events serve # OPTIONAL SSE stream, loopback-only (127.0.0.1:8787)
blackout support-bundle --preview # inspect a bug-report bundle before export
blackout support-bundle # write sanitized JSON locally; never uploaded
Boundaries that matter:
See blackout help operator and SECURITY.md for the full data inventory.
Blackout Kit intentionally documents its limits.
Country and transport presets such as --iran and --russia are temporary local override bundles. They change runtime behavior for that launch only and do not rewrite your saved settings.
speed — compatibility-focused local XRay and legacy-GDPI settingsprivate — randomized XRay fingerprint plus MUXlegend — stricter handling for known-bad normal TLS certificatesREALITY is handled separately by XRay’s configured REALITY handshake and does not use the normal TLS certificate policy.
blackout tools scan-file <path> scans exactly one existing regular file with the already-installed Windows Defender command-line scanner. It does not scan directories, download signatures, install or update a scanner, alter Defender exclusions, or change firewall, proxy, DNS, routing, or other security settings. Scans use Defender's non-remediating mode; a nonzero result is reported as a detection only when Defender's captured output independently confirms one.
blackout tools file-hash <path> calculates a SHA-256 fingerprint for one existing regular file locally. It streams the file in bounded chunks and refuses to present a digest when its before/after file snapshot changes during reading. It does not upload the file or its hash, contact VirusTotal or any other service, use an API key, scan for malware, or alter security or network settings.
blackout tools mac status only inspects the currently active physical Wi-Fi adapter. randomize and restore are Windows-only, explicit actions that ask for confirmation before briefly restarting that one adapter; non-interactive use requires --force. Fresh addresses and optional custom addresses must be locally administered and unicast. Before Blackout Kit's first change, it saves the adapter's prior NetworkAddress driver override and restore reinstates that exact override—or removes it to return to the hardware default when no override existed. This feature never changes a MAC automatically and does not change firewall, DNS, proxy, routes, VPNs, or other adapters. Some Wi-Fi drivers do not support a software MAC override.
GoodbyeDPI uses WinDivert, a packet-capture driver. Windows Defender and other antivirus products often flag WinDivert and tools built on it. These detections are commonly false positives for this use, but Blackout cannot verify them, so it does not hide them.
WinDivert.dll, WinDivert64.sys) live only in
bins/windivert/. The GoodbyeDPI executable stays in bins/. Launches use bins/windivert/ as
the working directory, so Windows loads the driver from there.bins/windivert/.
It refuses if the folder is not that path, is a symbolic link or junction, or contains anything other
than the two driver files. It never excludes bins/, a parent folder, or an executable.blackout doctor --fix does not touch Defender. blackout config --setup-defender-exclusion (or doctor --fix-av) prints a warning, then requires you to type yes.
Windows shows a UAC prompt only after that answer. Without an interactive terminal, nothing changes.blackout connect xray, which do not load WinDivert.bins/.
If Defender still flags goodbyedpi.exe, use a non-driver mode or review that detection yourself.
Remove the exclusion with blackout config --remove-defender-exclusion, or manually with
Remove-MpPreference -ExclusionPath "<path>".bins/ and may have excluded all of bins/.
blackout doctor (run as administrator) reports that broad exclusion and shows how to remove it. Run
blackout bins download goodbyedpi once to move the driver into bins/windivert/.Default recovery is intentionally narrow. It does not behave like “reset everything” unless the user explicitly asks for the broader Windows-only reset flags.
For deeper details, read SECURITY.md. For the complete list of outbound connections Blackout Kit can make — none of them telemetry — read NETWORK_PRIVACY.md.
Blackout Kit stores sensitive local operational state. Depending on what features are used, this can include:
~/.blackout-kit/settings.jsonImportant boundaries:
blackout config decrypt is a same-machine recovery action that restores plaintext filesBlackout Kit includes a stdio MCP server:
{
"mcpServers": {
"blackout-kit": {
"command": "blackout",
"args": ["mcp"]
}
}
}
Current tool surface includes:
blackout_readyblackout_connectblackout_disconnectblackout_emergencyblackout_statusblackout_read_logsblackout_configblackout_settingsblackout_split_tunnelblackout_net_toolsblackout_scanblackout_doctorblackout_security_modeblackout_snapshot (canonical local state; never proves remote success)blackout_recommend (deterministic recommendations with safety classes)blackout_recent_events (sanitized local event journal)blackout_support_bundle_preview (bundle structure without content)Important MCP boundaries:
blackout_doctor is currently read-only from MCP and does not forward a fix actionPrivileged MCP tools change settings, the daemon, DNS, hotspot, or network state. They run only when the server has a secret and the caller presents it:
BLACKOUT_MCP_TOKEN (or BLACKOUT_MCP_SECRET, used when the first is unset) in the
environment of the MCP client that launches blackout mcp. The server reads it at call time.auth_token argument of every privileged call.hmac.compare_digest. If no secret is configured,
privileged calls are denied. The check fails closed, and a denied call comes back as a failed
result (isError) rather than text an agent could misread as success.Client configuration with a token:
{
"mcpServers": {
"blackout-kit": {
"command": "blackout",
"args": ["mcp"],
"env": { "BLACKOUT_MCP_TOKEN": "<long random value>" }
}
}
}
Generate a value with python -c "import secrets; print(secrets.token_urlsafe(32))". The
agent must receive the token to call privileged tools, so treat it like a password: anything
that can read that agent's context can read it. Rotate it by changing the client's env value
and restarting the client. The server never echoes the token and never logs it.
Privileged calls (token required):
blackout_connect and blackout_emergency (including the tun engine, which creates a TUN interface)blackout_disconnectblackout_config with add, import, or removeblackout_settings with set or resetblackout_split_tunnel with add or removeblackout_security_mode with a modeblackout_net_tools with dns-set, dns-flush (DNS changes), hotspot (hotspot control), or netfix (network recovery)Read-only calls need no token: blackout_ready, blackout_status, blackout_read_logs,
blackout_doctor, blackout_scan, blackout_snapshot, blackout_recommend,
blackout_recent_events, blackout_support_bundle_preview, list and get actions of config,
settings, and split tunnel, blackout_security_mode without a mode, and blackout_net_tools with
ping, dns-bench, netfix-preview, or netfix-history.
Install the optional extra and run:
pip install blackout-kit[tui]
blackout tui
A full-screen terminal app with a live local status strip, engine picker with readiness badges, diagnostics, config management, a searchable settings editor, and network tools. The zero-argument chooser offers TUI Console when the extra is installed and falls back to the classic menus otherwise. All plain commands and JSON output are unchanged. The status strip shows local facts only — local readiness is not remote reachability.
Global hotkeys: s status · c connect · d diagnostics · g config · o settings · t tools · ? help · Esc back · q quit (with confirmation when an engine is running).
The Windows GUI is started with:
blackout gui
It is built with CustomTkinter and currently serves as a native desktop surface for the same general runtime, monitoring, and settings workflows.
Running blackout with no arguments always opens the terminal chooser first (see Zero-argument launcher); picking Windows App from that chooser is what opens this GUI window.
blackout split-tunnel manages Windows system-proxy bypass patterns.
It does not implement per-process routing, packet-level route tables, or Linux tunnel rules.
Example:
blackout split-tunnel add example.com
blackout split-tunnel add 192.168.1.*
blackout split-tunnel list
On Windows these rules map to ProxyOverride behavior for the system proxy path.
blackout doctor
blackout ready <engine>
blackout route
blackout stop
blackout fix
Use the broader Windows-only flags only if targeted recovery fails.
blackout bins
blackout bins download
tun will not startCheck:
sudo / root privilegesbins/blackout-engineiproute2blackout tools cert-check example.com
blackout tools cert-check example.com --allow
This does not apply to REALITY.
GoodbyeDPI is TCP-oriented. Browser video playback can prefer QUIC/UDP, which bypasses that path.
See the user guide’s troubleshooting section for the browser-side QUIC explanation and workaround.
MIT — see LICENSE.
Blackout Kit is intended for legitimate personal use such as accessing blocked educational resources, development tools, personal communications, and ordinary web services.
Users are responsible for their own legal and operational decisions. The author and contributors do not guarantee that any engine, profile, mode, or upstream service will be safe or effective in a given environment.
Made by Kiacoder — for people who just want a working internet connection.
from blackoutkit.sdk import Blackout) that is a thin facade over the CLI internals, a plugin system for custom rules/analyzers/exporters, a community marketplace with SHA-256-verified installs, and a read-only REST API v2 with webhooks and a WebSocket event streamblackout tools vmcheck reports VM detection and leftover state, the daemon heals its own leftovers at startup, and the Go core recovers from panics instead of killing the host process| Requires installed SoftEther client components |
appsscript | HTTP relay | Python engine | Yes | HTTP relay only |
hysteria2 | QUIC proxy | blackout_core.dll | Yes | Runs through the native sing-box-backed proxy engine |
tuic | QUIC proxy | blackout_core.dll | Yes | Runs through the native sing-box-backed proxy engine |
legend | Composite stack / security-oriented connect target | Tor + SNI + XRay stack | Yes | This is a connect/start target, separate from the legend security mode name |