What is Soul Cage?
Soul Cage is the cyber pet for hackers. Not a Tamagotchi. Not a Flipper Zero. Not a Pwnagotchi. Something that didn't exist before — Tamagotchi-level attachment, Pokémon Go-style real-world exploration, Pokémon-style battling, and the tool depth of an autonomous mini Wi-Fi Pineapple, all in one pocket-sized device with a soul. You don't operate it. You carry it, plug it in, or leave it on your desk — and it works. The sections below are the quick tour; each one links forward to its own dedicated section later in this wiki where the full detail lives.
Min Hardware - tldr
A Soul Cage pet is a Raspberry Pi Zeroyou carry in your bag — deck-of-cards sized, clipped to the outside of a backpack or sat on your desk. Two supported Pis (Pi Zero WH and Pi Zero 2 WH), a Waveshare 2.13" e-ink face, a PiSugar 3 battery, and — optionally — a USB Bluetooth dongle, one or two Alfa AWUS036AC Wi-Fi adapters for 5 GHz and role-splitting, and an Ethernet HAT for wired-LAN engagements. The minimum build is cheap, passively cooled, and runs off a phone battery. Full breakdown in Section 2 — Min Hardware.
How the Game Works - tldr
Everything the pet does in the field feeds a competitive layer. Pets fight 1v1 turn-based battlesagainst other players' pets — you pick which attack yours throws each turn, they pick for theirs, both reveal simultaneously, Pokémon-style. Queue from the companion app or soulcage.win; battles run in your browser. As the pet builds field work it develops a personality, and certain attacks start hitting harder against specific opponent types — how you've been running it becomes its fighting style. Win and their Credit Card drops to your wall: portrait, title at the moment of defeat, date. Lose and yours drops on theirs. On top of that, pets claim territory, pets level, Red Teams coordinate, and proximity collisions auto-trigger async battles. Full rules in Section 4 — How the Game Works.
Ethical Hacking Capabilities - tldr
The pet is a real autonomous red-team tool. In ATTACK it hunts Wi-Fi — capturing handshakes, grabbing PMKIDs, scanning for CVEs, running full LAN pipelines on routers it gets wired into, generating a full vulnerability report on every sync. In SENTRY it watches your own network passively, catching port scans, ARP spoofs, evil twins, MITM attempts. In SHIELDit acts as a hardened travel router — your devices connect to the pet's hotspot and all traffic is routed through WireGuard before it touches the public AP. In DETECT it scans for AirTags, Flipper Zeros, rogue ESP devices, and Flock cameras. In BADUSB it presents as a USB keyboard and fires payloads at a target machine. Every capability operates inside a strict scope — Bug Bounty Scope— that keeps the pet on networks it's allowed to touch. Full capability catalogue in Section 6 — Ethical Hacking Capabilities; scope rules in Section 5 — Bug Bounty Scope.
Faces/Text Functionality - tldr
The pet has a face. A Waveshare 2.13" e-ink display showing one of 28 emotion states — intense while scanning, happy when it lands a capture, bored when nothing's around, angry when something fails. Each state has a voice line: short, shown on the display, optionally read aloud via the companion app. What the face looks like and what it says is driven by the Soulit's wearing — a theme pack of 28 face PNGs plus paired voice lines. Every soul ships its own art and its own voice, so the same pet can be a glitch-kitty one day and a chrome knight the next. Dozens of souls are available through the Soul Shop in two tiers (free and premium), and anyone can create and submit new ones. Full system in Section 3 — Faces/Text Functionality.
How the AI Works - tldr
None of the pet's behaviour is scripted. It runs an on-device AI brain— Thompson Sampling and LinUCB, ~100 KB, running live on the Pi — that decides every ~30 seconds what to try next, on which AP, in what order. It learns what works in your specific environment. When it syncs to your PC, the PC runs a deeper offline pass and sends updated priors back to the Pi. A pet that's been running in a dense city centre for six months behaves differently to one that's been sitting in a suburban house. Same code, different brain. And when it has genuinely nothing to do — queues empty, nothing in range — it plays Doom, streamed live to the WebUI. Full breakdown in Section 7 — How the AI Works.
Bug Bounty Scope - tldr
The pet doesn't attack anything that hasn't agreed to be attacked. Every network is tagged opt-out (default — pet passes by), opt-in (owner signed their AP up for bounty testing), or sponsor(a paying partner running a controlled programme). Findings from opt-in and sponsor networks feed a bounty split between the researcher (the pet's owner), the platform, and — for sponsor engagements — the sponsor. Automated-only findings run under their own rule set; human-verified findings pay differently. Full scope model, payment tiers, and sponsor rules in Section 5 — Bug Bounty Scope.
Min Hardware
A Soul Cage pet is a Raspberry Pi Zero with an e-ink face, a battery pack, and — optionally — extra radios and an Ethernet adapter for the more aggressive modes. The project deliberately targets the Pi Zero line because of what it is: tiny, cheap, passively cooled, runs off a phone battery, and has a Broadcom Wi-Fi chip that can be patched for monitor mode and frame injection. You are not buying a rack; you are clipping a deck-of-cards-sized device to the outside of a backpack.
There are two supported Pis (call them stacks), and a small list of peripherals that split into required and optional. The required list is what you actually need for a working pet. The optional list is what unlocks the modes that make the game interesting — Bad USB, full wired LAN attacks, concurrent Bluetooth, simultaneous monitor + hotspot. Both stacks run identical software. They differ only in CPU horsepower and the specific Wi-Fi chip revision inside.
Stacks — Pi Zero WH vs Pi Zero 2 WH
Stack 1 — Pi Zero WH is the original Pi Zero W with pre-soldered headers. Single-core ARMv6, 512 MB RAM, Broadcom BCM43430a1 Wi-Fi chip, 2.4 GHz only. It runs 32-bit Raspberry Pi OS Lite. It can do everything a pet needs to do — scan, crack, battle, stream Doom — but the CPU is weak enough that WPA2 cracking on-device runs at about 30 H/s. That is slow, and it is why Tier 2 (your PC) exists: the pet captures handshakes and ships them home to crack properly.
Stack 2 — Pi Zero 2 WH is the faster sibling. Quad-core ARMv8, same 512 MB RAM, Broadcom BCM43436b0 Wi-Fi chip, still 2.4 GHz only. It runs 64-bit Raspberry Pi OS Lite. The ARMv8 core includes hardware SHA1 acceleration, which pushes on-device cracking to around 300 H/s — ten times the Zero WH. It is also the recommended stack because its Nexmon firmware patch set is fully stable for sustained monitor-mode and injection work (details below).
2.4 GHz only — both stacks. The Wi-Fi chips on both Pi Zero boards are 802.11 b/g/n single-band. No 5 GHz. No 802.11ac or ax. This is a hardware limit baked into the silicon — no software, no driver, and no firmware patch can make them see a 5 GHz network. In practice this is less of a restriction than it sounds: most home routers, almost every IoT device, and a huge chunk of guest SSIDs still broadcast on 2.4 GHz for range reasons. But it is a permanent ceiling, and if your target environment is 5 GHz-only, a Pi Zero pet cannot see it at all. (The optional Alfa AWUS036AC dongle, listed below, is dual-band and removes this restriction for whichever radio slot it is assigned to.)
Required — both stacks
The absolute minimum to have a working pet is the Pi, a Waveshare 2.13" V4 e-ink display, and a PiSugar 3 battery. With those three you get a powered, talking, scanning pet — it will find networks, attempt captures, battle other pets over the internet, and show a face on the screen. Everything else on the parts list is additive.
The Waveshare 2.13" V4is a 250×122 1-bit monochrome e-paper panel that talks to the Pi over SPI and sits flat across the Pi Zero footprint. It is the pet's entire face — the 28 emotion states from the theme system render here, along with a single-line status strip for voice lines and mode indicators. E-ink refreshes slowly (1–4 seconds for a full repaint) and draws almost zero power when idle, which is exactly the right trade for a device that changes expression every few seconds and needs to run all day on a phone battery. It is also the only display Soul Cage officially supports at launch; the daemon's display layer is written against this specific panel's V4 controller.
The PiSugar 3is a 1,200 mAh LiPo battery HAT that sandwiches onto the back of the Pi. USB-C charging, I²C power reporting (the daemon reads current battery percentage as an input to the brain — low battery triggers conservative behaviour), onboard RTC so the pet remembers the correct wall-clock time across power cycles, and — critically — two physical buttonsthat Soul Cage uses for on-device control: short-press, double-press, long-press gestures on both buttons switch modes, cycle themes, trigger payloads, and confirm menu selections, all without needing a phone or laptop. The daemon is wired against PiSugar's specific button gesture API; substituting a generic power pack is not supported because you lose the button input surface the daemon depends on.
Optional — both stacks
The three optional peripherals each unlock a specific class of gameplay, and most players end up with all three once they see what the modes do. None of them are required to get the device booting and battling — they gate the offensive modes Soul Cage treats as its endgame content.
Ethernet HAT — Waveshare ETH/USB HUB HAT.An RTL8152B-based 10/100M RJ45 port plus three USB 2.0 ports stacked on top of the Pi. Plug an Ethernet cable into a target's router, a wall jack, or a misplaced office patch and the pet gains the full wired LAN pipeline — port scanning, SMB enumeration, SQL injection, credential dumping, everything in the Red Team — LAN section. It is also the host for Bad USB mode: the HAT's USB ports are where the pet acts as a rubber-ducky-style HID, typing payload scripts at a plugged-in laptop. No Ethernet HAT means no LAN pipeline and no Bad USB. Most players buy one the week they understand what those modes do.
External Bluetooth — TP-Link UB500. A fingernail-sized Bluetooth 5.0 USB dongle (RTL8761B chipset) that presents as a second HCI adapter (hci1) alongside the Pi's onboard Bluetooth. The reason you need a second adapter is that the Pi Zero's Wi-Fi and Bluetooth radios share antenna and bus resources — you cannot do serious Wi-Fi work (monitor mode, injection, channel hopping) and serious BLE work (scanning, pairing, spoofing) at the same time on the built-in chip without one stepping on the other. Dropping a UB500 in a USB port gives Bluetooth its own dedicated radio, and now the Wi-Fi pipeline and the BLE pipeline run concurrently without fighting. Required if you want both kinds of attack happening in the same session.
External Wi-Fi ×2 — Alfa AWUS036AC. A pair of Alfa AWUS036AC USB Wi-Fi adapters (RTL8812AU chipset, dual-band 2.4/5 GHz, 802.11ac, high-gain external antennas). The two become wlan1 and wlan2 on the pet. One runs in monitor mode for capturing and injecting; the other runs as an access point for SHIELD mode, where the pet hosts a rogue AP or captive portal for controlled engagements. The onboard chip can technically run hostapd and monitor at the same time under Nexmon, but it locks both roles to a single channel and the transmitted beacons degrade monitor-mode receive sensitivity on the same front-end — so a single-radio build pays a real capture-yield cost to run Evil Twin, and the pet is deaf to every other Wi-Fi target for the duration of the session. Two Alfas let the brain split the roles across separate radios: onboard handles monitor or AP duty, external handles managed-mode scanning, Internet sync, and the LAN pipeline in parallel. A second benefit: the AWUS036AC is dual-band, which is the only way to see 5 GHz targets at all on a Pi Zero pet. With one Alfa plugged in, 5 GHz scanning and injection become available on that radio while the onboard chip keeps handling 2.4 GHz on its own channel plan. The full priority logic for which adapter runs what job under which mode is covered in Section 6 — Brain / Priority Stack.
Hardware Notes
Soul Cage leans hard on Nexmon, the open-source Broadcom firmware patching framework that turns the Pi Zero's onboard Wi-Fi chip into a card that can do monitor mode and frame injection. Without Nexmon, the onboard radio is a normal client-only chip and most of the red-team Wi-Fi modes are impossible. With Nexmon, the onboard radio becomes capable enough to be the primary attack surface on a minimum build. The two Pi Zero stacks use different firmware revisions, and their Nexmon status is not the same:
Stack 2 (Pi Zero 2 WH — BCM43436b0): stable. The 64-bit stack has a complete Nexmon build with an 8-layer crash-recovery patch applied on top of stock. Validated at 27,982 injected frames over a 5-minute stress test with zero crashes. A PSM watchdog resets the firmware every 15 minutes as a precaution, and a GPIO-level WL_REG_ON power cycle recovers the chip if the SDIO bus ever wedges. Sustained injection load is reliable. This is why Stack 2 is the recommended build.
Stack 1 (Pi Zero WH — BCM43430a1): in progress.Stock Nexmon on the 32-bit stack gives monitor mode and injection, but under sustained channel-hopping load the firmware crashes. Root cause is identified: a race condition in the channel-set path that always returns success even when the hardware timed out, with no rate limiting and no retry. A driver-side fix — mutex serialisation, 10 ms minimum interval enforcement, exponential backoff — is designed, and the firmware memory map is fully traced, but the full crash-recovery patch set from Stack 2 has not yet been ported across. If you are building a pet right now and want it to be stable today, pick Stack 2. If you already own a Pi Zero WH, Stack 1 will get the same patches — this wiki will note when that ships.
About the OS.The Pi runs Raspberry Pi OS Lite (headless). The Soul Cage daemon is a native C binary built for each stack's architecture and installed into a custom pi-gen image; you do not bring your own Raspbian and apt installSoul Cage on top. The image is the install. This keeps the kernel version, firmware patches, and daemon in lockstep, and removes a huge class of “works on my machine” problems from a project whose hardest problems are already at the firmware level.
Faces/Text Functionality
Every pet has a theme— a package of artwork and one-liners that turns the generic brain into a character. The brain logic is identical across every theme; only the presentation changes. That split is the whole point: the pet's voice, face, and attitude come from the theme, but the capture work, the decisions, and the battles all come from the shared engine underneath. Swap themes mid-season and the pet still plays the same — it just sounds and looks different doing it.
A theme contains two things: Faces (the pixel-art PNGs shown on the e-ink screen) and Voices(the short one-line text the pet says when something happens). A subset of the same face art is also baked into a WAD file so the pet's face appears at the bottom of the Doom HUD when the pet is idle and playing the game. Those three surfaces — e-ink face, voice line, Doom HUD face — are the entire theme footprint.
Face/Voice System
The pet has 28 emotion states it cycles through as it works — happy, sad, angry, excited, bored, intense, grateful, lonely, broken, and so on. Each theme supplies a face image and a voice line for every one of those 28 states. When the pet transitions into a state (say, captures a handshake and flips to happy), the daemon looks up that emotion key in the active theme, draws the face on the e-ink screen, and shows the matching voice line underneath.
Voice lines support runtime substitution — “New AP: {SSID}” becomes “New AP: CAFE_WIFI”when drawn. That's how every theme feels specific to what the pet is actually doing, even though every theme is drawing from the same pool of events. The same capture event, on the same hardware, reads differently on a sarcastic Rick Sanchez theme versus a stoic Reaper theme, because the 28 voice lines and 28 face images are different — but the captured handshake is identical.
The voice can also speak aloud via the Android companion app, which runs the text through the phone's built-in text-to-speech engine. That's off by default (a pet muttering to itself from your backpack is a niche preference), but it's a single toggle in the app for anyone who wants it. The e-ink text is always shown; TTS is optional on top.
Voice lines are capped to about 20 characters per line to fit the e-ink status strip, and faces are constrained to the display's usable area. This is enforced by the theme validator — a submission with oversized art or overlong voice lines is rejected automatically before it ever reaches a player's device.
Doom Face System
When the pet has nothing to do — no APs to scan, no cracks running, no sync pending — it plays Doom. The game runs offscreen on the Pi and streams to the pet's WebUI, so you can watch your pet play through a browser on your phone. This is the Idle Game system, detailed in the Shop subsection below.
Doom's HUD has a face at the bottom of the screen — the iconic looking-left / looking-right / grimacing / dead portrait that reacts to whatever's happening to the player. The Doom Face System replaces that portrait with your pet's face, drawn in the art style of the active theme. Your Rick Sanchez theme? That's Rick grimacing when he takes damage, Rick grinning when he picks up the BFG. Your Reaper theme? That's the Reaper's skull cycling through the same reactions.
The Doom face uses a subsetof the same art discipline as the e-ink emotions — about 38 small frames covering 5 health tiers (100% / 80% / 60% / 40% / 20%) × 3 look directions (left / forward / right), plus special frames for getting hit (“ouch”), picking up powerful weapons (the evil grin), grabbing a key (“kill look”), and dying (dead). Those frames are packaged as a small Doom WAD file shipped inside every theme, and Doom itself swaps them in over the default Freedoom portrait the moment the pet starts playing.
If something goes wrong and a theme is missing its Doom face WAD — an older pack, a corrupt install, whatever — the daemon falls back to one of four personality fallback WADsbaked into the base image (aggressive, cautious, chaotic, or bored) picked to match the pet's current personality drift. The Doom stream never shows vanilla Freedoom if a pet is alive and has a personality — there's always a themed face at the bottom. It's a small detail, but it's the difference between watching your pet play Doom and watching Doom.
Getting Themes & Doom Campaigns
Every theme — official or community, free or paid — lives in the Soul Shop. There is no “bundled” theme list and no manual install route; the shop is the only way themes get onto a pet, and the only way they come off. Anyone can make a theme and upload it. The creator picks the tier: free (zero Sudo, open to anyone who clicks install) or premium (priced in Sudo, the in-game currency — typically around 2,500 Sudo / ~$5 AUD for a standard premium theme, 3,500 Sudo for a limited seasonal release). Those are the only two tiers. Official Soul Cage themes and community-submitted themes sit in the same shop, follow the same validator, and use the same pricing model; the only difference is who drew them.
When a pet first boots and logs in, it pulls its owner's current theme loadout from the server and installs those themes from the shop. Uninstalling a theme removes it from the pet. Every theme change is a shop transaction — including picking up a free one.
Theme Fragmentsare a small discount mechanism. Every time you beat an opponent in battle whose pet is using a specific premium theme, there's a 10% chance of dropping a fragment for thattheme. Each fragment knocks 1% off that theme's Sudo price, cap at 10%. Fragments never grant a free theme — they reduce the price, they don't eliminate it. If you've been grinding battles against Reaper players all season, by the time you buy the Reaper theme you're paying 2,250 Sudo instead of 2,500. Small, but it rewards theme-flavoured grudge matches.
Every pet ships with 6 theme slots. That's how many themes can be loaded on the device at once — you can own more than 6 in your account, but only 6 are active on the pet. Extra slots cost 2,000 Sudo each in the shop. The active theme is switched on-device with a button press on the PiSugar power button (the daemon cycles through installed themes on the e-ink, you press to confirm), or from the companion app.
Doom Idle is a separate unlock: 2,000 Sudo (~$4 AUD) one-time purchase. Without it, an idle pet just sits in the bored emotion. With it, the pet plays Doom — Freedoom (the GPL free-as-in-speech Doom IWAD) is bundled in the Pi image at no cost, so what you're buying is the idle game feature itself: the bot that plays, the WebUI live stream, and the scheduler integration that makes sure Doom never steals time from actual work (any scan event, any crack job, any sync kills Doom instantly). Paying for it once on an account unlocks it on every pet tied to that account.
Doom Campaigns are the companion to themes for the Idle Game system: custom WAD files authored by the Soul Cage team (or by community creators, same validator, same shop route) that give the pet specific levels to play instead of stock Freedoom. Campaign WADs ship alongside scenario configs that define the objectives — what the pet is trying to do, what counts as progress, how its behaviour is rewarded during training. Some campaigns are free, some are premium shop items, and one is a full campaign authored in-house called DoorKey. Campaigns are a content layer on top of the base Idle Game unlock, not a replacement for it.
How themes are made. Anyone can make one. A creator draws two spritesheets — one containing all 28 emotion faces laid out in a grid, one containing the ~38 Doom HUD frames — and uploads them to soulcage.win. The server splits the sheets into individual PNGs, builds the doom_hud.wad automatically, packages everything with a meta.json and voice.json, runs the validator, and — if it passes — lists the theme in the shop at whatever tier the creator chose (free or premium). The creator never touches a WAD-building tool; they draw pictures, pick a price, and the shop handles the rest. Soul Cage's own launch themes go through the exact same pipeline as every community submission.
How the Game Works
Soul Cage has three interlocking loops, and understanding how they feed each other is the whole game. Battles earn Sudo and ELO rank; Sudo buys cosmetics and boosts. Field activity(wardriving with the pet) earns XP and shifts the pet's Personality toward one of five types. Territoryis the spatial layer on top of field activity — every AP you scan becomes yours or your Red Team's, and rivals can take it back by physically being there. Each loop outputs something the next loop consumes: XP changes personality; personality changes battle style and territory modifiers; territory collisions trigger auto-battles between players who were at the same router. The longer you play, the more interlocked it gets.
Below: how to get in, the mechanics of each loop, and how they connect.
Sign Up & Getting Started
Sign up at soulcage.winwith email/password or Google/Apple/GitHub, pick a handle, and you're in. The entire game runs in the browser — battles, world map, Red Team page, shop, feed — on both desktop and mobile. No download required to start playing.
New accounts begin as a Kernel: the pet exists but hasn't hatched. You can already battle other Kernels, join a Red Team with a join code, and earn Sudo — everything except field activity. Hatching happens automatically on your pet's first real outing once the hardware is paired. Staying a Kernel for seven days before hatching earns the permanent, un-buyable Born in the Shell badge.
An optional companion Android app is available direct from soulcage.win/download— not the Play Store, because Google's 30% cut would force a price hike we refuse to make. Every APK is scanned by VirusTotal and shipped with a published SHA-256 so you can verify it before installing. The app is a shortcut to the site with push notifications, GPS streaming to your Pi, and BLE pairing. Everything the app does, the website does — the app just makes it faster.
A typical first week: day 1 sign up and fight your first Kernel battle; day 2 join a Red Team; days 3–6 climb the Kernel leaderboard and save Sudo to reserve the theme you want post-hatch; day 7+ the hardware arrives, you flash the image, pair it from the website, and take the pet out. First outing hatches it.
Battles
Battles are turn-based 1v1 between your pet and another player's. Open the Battle tab, hit Queue, and the matchmaker finds someone near your ELO (your skill rating). Both pets start at 100 HP. Each turn you secretly pick one of five attacks — Zero Day, Phish, Exploit, Payload, Rootkit — your opponent picks theirs, both reveal at once, and one pet takes damage. First to 0 HP loses. A battle usually runs 7–12 turns and takes a couple of minutes in sync mode.
The skill is reading the opponent. No attack beats all the others — they have a similar chain structure to rock, paper, scissors, so the right move is always the one that counters what you think they're about to throw. Your pet's personality and title also stack advantages into the matchup (Ghosts have an edge over Wardrivers; a higher-title pet hits harder), and the server occasionally flips a turn into an Overclock roundthat inverts the usual matchup chart — so the meta shifts mid-battle and you can't autopilot. The game shows you the attack names and the outcome; how the numbers are generated under the hood is deliberately kept out of the UI, because knowing the dice would ruin the bluff.
Every battle is recorded and publicly replayable from a shareable link — win or lose, you can send the replay to friends, post it, or study your own losses. Results are verifiable: the server commits to each turn's randomness before revealing it, so nobody — not even the house — can rewrite a battle after the fact.
Wagering.Queuing with no wager is fine — you're playing for ELO. Optionally both players can stake a Sudotier; if both accept, both escrow up front and the winner takes the pot. Wagering is sync-only: both players must be live. Async battles (proximity encounters, async friend challenges) never carry wagers — too long a lock-up to be fair.
ELO. Standard Elo (K=32), starting 1200, floor 800, no ceiling. Season-end does a soft reset: R_reset = R × 0.25 + 1200 × 0.75, so the top of the board still has an edge going into the next season but nobody starts the season already champion. ELO decays by −2/day after 30 days inactive.
Credit Card Trophy Wall. Every opponent you defeat drops a Credit Card — a trophy bearing their pet portrait, handle, title at defeat, and ELO, with their chosen social links on the reverse. Displayed on your soulcage.win profile. If they beat you back, they reclaim the card — it stays on your wall greyed out with a [RECLAIMED] badge.
Personality System
Personality is the bridge between what the pet does in the field and how it fights in battle. There are five types, each with an Overclock evolved form, and you don't choose — the type drifts in response to real field activity. Every confirmed field event contributes weighted points to five affinity buckets (capture / deception / recon / crack / mobility). All buckets decay by 3% per session so old behaviour fades; the dominant bucket is your current type, recalculated server-side after every sync. Two months of nothing but evil twins and deauths makes a Ghost; a winter running SENTRY makes a Recon.
- Sniffer → Siphon — Frame capture dominant (handshakes, PMKID, probe interception). Beats Recon, loses to Wardriver. Territory bonus: +15% scan_count on APs with captured handshakes.
- Ghost → Wraith — Deception dominant (evil twin, deauth, MITM, portal spoofing). Beats Wardriver, loses to Sniffer. Territory bonus: rivals lose only −0.5 scan_count per attack instead of −1.0 — your territory is sticky.
- Recon → Pathfinder — Analysis dominant (port scans, CVE sweeps, service enum, traffic watchdog). Beats Bruteforce, loses to Sniffer. Territory bonus: +2 scan_count on APs within 500 m of a Landmark.
- Bruteforce → Breaker — Credential dominant (hydra, cracking, auth attacks). Beats Ghost, loses to Recon. Territory bonus: flipping a rival AP grants +2 scan_count on the flip, so captured ground is hard to re-take immediately.
- Wardriver → Nomad — Mobility dominant (AP discovery, GPS churn, topology mapping). Beats Sniffer, loses to Ghost. Territory bonus: +1 reinforcement per scan inside a fresh cell — rewards exploration.
Both ATTACK and SENTRY events contribute — catching an evil twin on your home network counts as a deception event even in blue-team mode. At every 10 levels you can Overclock the current personality into its evolved form. Overclock flips the matchup chart for that pet in Overclock-mode battle rounds, so evolved pets read differently to opponents. No two pets end up the same.
Territory Wars
Territory is the spatial loop. Every WiFi AP your pet scans becomes your Red Team's on the world map — or your own if you play as a Lone Wolf. APs are colour-coded by side, never by individual identity. The mechanic is a single hidden number: every AP has a scan_count. Your side re-scanning an AP you own increments it (hardening). A rival scanning it decrements it (chipping). When scan_count hits 1 and a rival scans again, the AP flips to them — and they then have to re-scan to harden their new capture. Reinforcement tiers (L1–L∞) are visible on the public map; the raw scan_count is never shown to rivals (only low/medium/high), to prevent targeted farming of soft APs.
How personality changes this: Ghost halves rival chip damage (territory is sticky), Bruteforce lands captures at L2 instead of L1 (captured ground is hard to re-flip), Wardriver gets +1 reinforcement on fresh cells (exploration pays), and so on. This is the layer rival wardriving platforms cannot match — because they have no pet, they have no personality, so they have no spatial modifier.
Privacy by design.The public map never shows an owner's live physical location and never resolves below H3 hex cell resolution (~8.5 km² per cell at res-5), so individual router addresses can't be derived from map data. Clicking a cell or AP doesreveal the owner's pet name, Discord handle, and total captured area — attribution is the glory loop and the point of the game. Authenticated owners see their own routers as pins in a private “My APs” layer (it's their data, no privacy issue); the layer never renders for anyone else. Civilian opt-out via soulcage.win/remove-my-wifipulls a BSSID off the map entirely. Pet owners who wardrive can't use civilian opt-out on their own network — covered in the Bug Bounty section.
Capture feed. Captures stream live to the world map, to your Red Team dashboard (Recent losses / Recent captures), and to the Soul Cage Discord bot if linked (#territory-wars, #pet-leveling-announcements). When your team loses ground the defender gets a direct ping (“Your team just lost 47 APs near [blurred area] — strike back”). Territory losses are designed to trigger revenge runs.
Red Teams — Onboarding
A Red Team is a named group with shared identity, shared territory, a war treasury, and seasonal leaderboards. There's no upper size cap — form a duo, or rally a clan of thousands; the proximity-based war system scales either way. The one floor is leaderboard eligibility: a team needs at least 5 membersto appear on the seasonal rankings, which stops one-person “teams” farming solo ladders under a team name. The terminology is infosec — a red team is an offensive security unit — not military. Solo play is the default: Lone Wolves appear on their own leaderboards and can still be challenged, declared on, and drop Credit Cards like anyone else. Joining a team is always optional.
Creating a Red Team costs 5,000 Sudoand is gated behind a hatched pet + level 3 (so abandoned teams don't burn the name pool). Sets the team name and banner permanently; the creator becomes Operator and receives a join code to distribute however they want — public post, DM, Discord, in-person. Joining a team is free: enter a valid code. There is no auto-matchmaking and no public apply-to-join queue — codes are code-only, and can be rotated or revoked at any time.
Red Teams — Roles
- Operator — founder/leader. Authorises wars, sets recruiting policy, runs the treasury. One per team.
- Handlers (up to 4) — officers. Recruit, kick, post treasury deposits, co-sign wars.
- Ops (everyone else) — members. Contribute territory and battle activity.
Red Teams — Seasons
Seasons are 13 weeks long. Week 1 is the Formation window — create, join, leave, switch teams freely; wars cannot yet be declared; territory capture runs normally. Weeks 2–12 are the Locked season — no new Red Teams can be created (prevents mid-season leaderboard sniping and post-defeat revenge-rebrand), but existing teams still recruit and members can still leave to Lone Wolf or switch teams. Wars, champion matches, and disbandments all happen here. Week 13 is Season end — leaderboards snapshot, champions awarded, leaderboards reset. Rosters, territory, treasury balances, and personality state all persist; only the competition metric resets.
Red Teams — Wars
Wars aren't declared manually — they trigger automatically when enough proximity battles accumulate between two sides: Lone Wolf vs Red Team needs 5 contested battles in 14 days; Red Team vs Red Team needs 10. When the threshold hits, every member of both sides gets a 48-hour window to rank all three possible outcomes — War (7-day territory capture battle, full stakes), Concede (auto-loss, reduced treasury penalty), and Champion Match (best-of-5 battles between team champions) — 1st, 2nd, 3rd preference.
Every ballot is a full 1/2/3 ranking, and each side's ballots are summed into a single team ranking, which gives the server a 3×3 matrix of preferences to settle on the outcome both sides can live with most. Voting Concede-firstis a real option — the team that most wants to avoid blood gets a softer landing if the other side also prefers peace. Don't vote and you abstain from shaping the outcome, but abstention doesn't block it.
Two safeguards keep the vote honest. Quorum:a team's ranking is only counted if at least 10% of active members cast a ballot (minimum 1); below that, the server assumes the team defaulted to aggressive and submits a War-first ranking on their behalf. This stops a single troll ballot on an otherwise-silent team from surrendering the war. Tiebreaks:if a team's internal vote produces tied options, the server breaks the tie toward aggression (War > Champion > Concede), guaranteeing every team submits a clean 1/2/3 ranking into the matrix.
Full wars last 7 days; capturing 51% of rival territory ends the war instantly. Losing teams enter a 72-hour disbandment grace window. Members who disagree with where the team is heading can leave mid-war — there is no veto mechanic and no leadership to overrule; abandonment is the vote. A Lone Wolf who beats a Red Team earns the rare Black ICEbadge (permanent, a Gibson reference), and the beaten Red Team is locked out of scanning the Lone Wolf's territory for 14 days — protective cooldown for the winner, not the loser.
Proximity Encounters
Proximity encounters are where the three loops collide. If your pet and a rival's pet scan the same individual APwithin a 6-hour window, the server automatically issues a 1v1 battle between the two of you — individual vs individual, never team vs team. You get a push notification: “Proximity encounter near [city] — a rival pet was at the same AP.” The same turn-based Grime-dice battle as ranked, but in async mode: each turn has a 24-hour clock instead of 30 seconds. Play when you open the Battle tab; the server pushes the opponent when you're done. A proximity battle can unfold over a day or two.
Missed turns forfeit that turn; three missed in a row loses the battle. No wagers on async (lock-up would be unfair), no Reliability hit for slow play. Every proximity battle counts toward the war thresholds above — so a string of chance encounters in one neighbourhood can escalate into a full Red Team war without either Operator ever clicking a “declare” button. Territory collisions become battle content; battles generate war pressure; war outcomes redistribute territory. The loop closes.
XP, Levels & Progression
XP is paid only on confirmed field outcomes— actions validated by the server's P7 truth-checking layer against the pet's trajectory log. Failed attempts award nothing; client-side XP can't be fabricated. Both ATTACK mode (capturing handshakes, cracking PSKs, completing LAN pipelines, BadUSB payloads, PoisonTap installs) and SENTRY mode (detecting evil twins, catching MITM, spotting DEAUTH floods, flagging BEACON C2 patterns on your LAN) award XP — red team and blue team both count.
XP raises your level, which unlocks new battle moves, passive perks, and cosmetic slots. In parallel, the same field events feed the personality drift buckets — so levelling up and personality shift are two readouts on the same underlying stream of field work. You don't grind one and neglect the other; playing the game moves both.
Titles are milestone gates on top of level. Eleven tiers, from Kernel (0) through Script Kiddie (1), Packet Rat (50), Pentester (150), Operator (280), Red Team (450), Exploit Dev (600), Zero Day (730), APT (850), Nation State (950), to [REDACTED] (1000) — a three-stage puzzle whose name is unknown until the first solve. Each title gates a specific combination of achievements (e.g. Pentester = 3 confirmed CVEs + 1 complete LAN pipeline run), so titles certify what you've actually done, not just how long you've been playing.
Progression shape is logarithmic.Levels 1–100 are days to weeks of active field use; 100–500 is months; 1000 requires years of consistent wardriving. The top titles are deliberately un-buyable and un-grindable — they're earned by doing the work. No prestige reset in v1.
Bug Bounty Scope
Bug Bounty Scope is Soul Cage's Uber-for-red-teams. Traditional penetration testing gates serious security work behind six-figure consulting retainers and HackerOne-scale bounty programs — out of reach for the small business, the landlord, the school, the pet owner who just wants their home network checked. Scope flips that: any BSSID owner can opt in, and any pet already in range can fulfil. It's distributed adversary simulation, dispatched by geography rather than contract.
This is not a game mechanic — it's the legal on-ramp for what the fleet is already doing. The word “Uber” was a hacker word before it was an app company; we're reclaiming the original sense. Scope owners opt their BSSIDs in for authorised testing; pets attacking those targets operate under explicit written consent — legally white-hat. Unscoped BSSIDs remain subject to ordinary game mechanics (territory, passive scanning) and can be removed from the public map for free, no account, via opt-out.
The economics are deliberately designed to be self-policing. A scope owner puts up a bounty pot; a pet in the field discovers a vulnerability; a fixer remediates it; three nearby verifiers confirm the fix — and the payout splits across all of them. Because only pet-AI autonomous actions count, the only way to game the system is to physically carry a pet into range. Which is the exact thing the game is supposed to incentivise.
Opt-out
Opt-out is unconditional and free. Visit soulcage.win/remove-my-wifi, submit a BSSID, solve a captcha — done. Within 24 hours the BSSID is excluded from the public map, added to the fleet blacklist so no pet scans it again, and any territory tied to it is deleted. The server will not confirm whether the BSSID was ever in the database (confirming presence would itself be a privacy leak). The standard _nomap and optout_nomap SSID suffixes are honoured automatically with no form required.
One exception: pet owners with any intent to wardrive cannot opt out their own BSSID. The principle is simple — if you can dish it out, you can take it. If you don't want other pets capturing your handshake, you don't get to capture theirs. Opt-out is for people who aren't playing; it isn't a shield for players who want to hide their own network while hunting everyone else's.
Opt-in
Opt-in turns a BSSID into a scoped, legal bounty target. The process at soulcage.win/scope is four steps, each of which exists to stop a specific failure mode — fake scopes, over-broad consent, cross-jurisdiction illegality, and uncontactable operators.
- BSSID verification challenge. The server asks you to briefly rename the SSID to a random server-issued string for 30 seconds. Only someone who actually controls the router can do this — it proves ownership without touching your router password or admin interface.
- Capability checklist. Tick exactly which tests the fleet is authorised to run against your network: passive scan, WPA handshake capture, WPS PIN attack, PMKID capture, offline PSK cracking, evil-twin testing, deauth stress, client enumeration, internal service fingerprinting, CVE matching, payload-delivery testing. Anything unticked is forbidden — the daemon enforces this automatically, so a pet physically cannot run an unchecked capability against your BSSID regardless of what else is on the menu.
- Legal declaration and jurisdiction. You certify ownership or admin authority, consent to testing within the declared scope, and accept that any criminal act outside scope remains a matter for law enforcement regardless of what you signed. Capabilities that are illegal in your jurisdiction (deauth is illegal in several countries) are greyed out automatically.
- Contact info. Email is mandatory for vulnerability reports; phone is optional for high-severity findings that need fast turnaround.
Incentives. Every XP, Sudo, and TerritoryScore gain from a scoped capture is doubled. That alone is strong motivation for the fleet to prefer scoped targets over unscoped ones. Scope owners can optionally attach a Sudo bounty pot that releases on verified fix — which is where the split below kicks in.
Bounty split
The split exists because a bug bounty has three jobs — find, fix, and verify — and a healthy economy pays for all three. If the Discoverer and Fixer are the same person (self-fix on your own equipment, which is common), they take the combined cut. If the Fixer is a separate contractor, the two splits reflect their roles honestly: discovery is the interesting part, but remediation is the paid work.
- 10% House — platform fee; funds VIP revenue-share, researcher payouts, and infrastructure.
- 60% Fixer — whoever actually ships the patch / config fix.
- 10% Discoverer — whoever's pet found the vulnerability.
- 10% × 3 Verifiers — three independent nearby pet owners who confirmed the fix.
- Self-fix: Discoverer = Fixer takes the combined 70%; Verifiers still earn 10% each.
- Unfixed at 90 days: 90% refunds to the scope owner, Discoverer keeps 10% for the write-up.
Verifiers are selected by proximity — active pet owners within 20 km of the target, radius widening automatically if fewer than three respond. Anti-collusion rules prevent a Verifier from being in the same Red Team as the Discoverer or Fixer, or sharing a device ID. The practical effect: a real vulnerability needs three strangers within 20 km to stand it up, which is exactly the kind of distributed witness a crowdsourced bounty needs.
Automated-only rule
Only pet-AI autonomousdiscoveries, fixes, and verifications count toward bounty payouts, leaderboards, or XP/Sudo rewards. A human clicking “verify” in a web UI earns exactly nothing — that path is kept for personal own-network use only. The rule kills two problems at once: it eliminates click-farm sabotage (you can't script a bot to spam verifications), and it ensures that gaming the system requires physically carrying a pet into range of a target. Which is the exact behaviour the game is designed to reward, so the enforcement mechanism and the game mechanic align.
Sponsor Tiers
Sponsor tiers exist so that the same legal red-team engagement costs a household $12 and a bank $96,000 — and the bank's money pays for the household. The free tier (one engagement per year, one BSSID) stays free forever. Everything above it is priced on the old-fashioned principle that people with money should carry people without: roughly 70% of every dollar above the Individual tier flows into a cross-subsidy pool that funds researcher payouts, infrastructure, and the free tier itself. The industry charges $30,000–$300,000/yr for what the upper tiers deliver; we charge a fraction of that and redistribute the margin downward.
All tiers are month-to-month via Stripe, minimum one month, cancel anytime. Annual prepay gets two months free. Bounty payouts themselves stay in Sudo; the subscription and the bounty economies don't cross.
Individual — $12/yr ($1/month).For the household, the hobbyist, the pet owner who wants their own home network checked. One BSSID, one active engagement per month (twelve per year, up from the free tier's one), sponsor badge on your scope marker, standard fleet rotation. Priced so that nobody is excluded from authorised testing by money. This tier is deliberately unprofitable on its own — it exists because security shouldn't be a class privilege.
Small Business — $1,200/yr ($100/month). For the café, the clinic, the single-site office, the landlord with a handful of properties. Up to five BSSIDs, four engagements per month, monthly PDF report (executive summary + capability-level findings, formatted for insurance and compliance paperwork), sponsor badge, priority fleet rotation — your BSSIDs scanned more frequently than unscoped targets. Comparable managed pentesting on HackerOne or Bugcrowd starts at roughly $30,000/yr; this is the same legal posture at a fraction of the price because the fleet, not a billable consultant, does the work.
Organisation — $12,000/yr ($1,000/month).For schools, councils, mid-sized companies, MSPs reselling to their clients. Up to 25 BSSIDs, unlimited engagements, weekly PDF reports, priority verifier pool (first call on the three nearest verifiers, reducing fix-verification time from days to hours), compliance-aligned reporting suitable as evidence for ISO 27001 and SOC 2 audits, named account contact for onboarding. This tier replaces the $50k–$100k/yr mid-market PTaaS contracts from Cobalt and NetSPI.
Enterprise — $96,000/yr ($8,000/month).For companies, banks, hospitals, retail chains, office buildings. Unlimited BSSIDs and engagements, continuous coverage, dedicated verifier pool (verifiers routed toward your estate during agreed windows), compliance-grade PDF reports with attestation, SLA on high-severity findings, custom campaign routing, optional “Trusted by” listing on soulcage.win (opt-in — regulated industries may decline). Priced at roughly one-third the comparable Synack365 / HackerOne managed-bounty contract, with the difference subsidising everything below. If you're on this tier, you are directly funding a pet owner on the Individual tier somewhere — that's the model, stated plainly.
Researcher payments
At end-of-season the top researchers on each of the three bounty leaderboards — Discoverer, Fixer, and Verifier — receive performance-based paymentfor the security research work they delivered over the season. This is contractor income, not a prize: structurally identical to how HackerOne, Bugcrowd, and Synack pay their researchers. It is funded from the 10% House cut plus VIP Sponsor revenue, and it's paid out via Stripe Connect as ordinary freelance income in every jurisdiction Stripe supports. The practical upshot: for the top of the leaderboard, Soul Cage becomes a part-time security research job with a game bolted on top — which is more or less the long-term pitch of the whole platform.
Ethical Hacking Capabilities
Under the hood, your pet is a compact autonomous security platform. It packs a mini Wi-Fi Pineapple, a Flipper-adjacent Bluetooth tool, a BadUSB keystroke injector, a full LAN pentest pipeline, and a passive surveillance sensor — all orchestrated by one brain. What makes it more than a toolbox is the control plane: every capability is gated by the current mode (what the operator asked the device to do), the current sub-mode (how fast it's moving), the scope flagsyou set during onboarding, and the firmware's health. Nothing fires unless all four agree.
The sections below walk the stack top-down: first the modes that switch the whole machine into a different posture, then the movement-aware sub-modes that restrict what's legal to try, then the concrete attack and detection catalogues each mode draws from, and finally what happens to the data captured along the way — specifically, how a handshake becomes a cracked password through the five-tier cracking pipeline.
Operating Modes
Modes are the top-level posture selector. The Pi's single radio and composite USB stack can't do everything at once, and some capabilities (BadUSB, travel-router, passive-sensor) have fundamentally incompatible legal postures. Rather than paper over that with flags, each mode re-wires what's loaded: which services run, which ethics gates are bypassed, which XP events fire, and what the e-ink face looks like. Switching modes is cheap; the brain isn't — it only runs in modes where autonomous action makes sense.
- ATTACK — Full autonomous wardriving. The brain runs every priority layer continuously: passive capture and PMKID grabs, deauth bursts, WPS Reaver/Pixie Dust, evil twin with captive portal, CSA/reassoc/M2 injects, beacon spam, SAE floods, AP clone spam, Karma, WPA-Enterprise evil AP, concurrent BLE spam (Sour Apple, SwiftPair, Samsung, AirTag spoof), and — on any cracked PSK — the full LAN pipeline. Personality drifts with field work. This is the mode the pet is designed around.
- SENTRY — Passive blue-team sensor. All injection and attack services are hard-disabled. Instead the Pi watches the local network for port scans, ARP spoofs, rogue DHCP servers, deauth floods, LLMNR/NBT-NS poisoning, brute-force attempts, DNS spoofing, evil twin drift, C2 beacons, and outbound exfil anomalies — plus scheduled asset, exposure, integrity, and persistence sweeps. Earns XP at the same rate as ATTACK but from detection events instead of attack events.
- SHIELD— Travel router. Your phone/laptop connects to the Pi's WPA2 hotspot; the Pi handles the dirty public Wi-Fi on wlan1 and NAT-routes your traffic through a DNS blocklist, with ARP/rogue-DHCP/evil-twin/DNS-poisoning detection running on the upstream side. Optional WireGuard tunnel encrypts everything beyond the Pi. Requires an external wlan1 adapter.
- DETECT — 100% passive. No injection ever. The radio alternates WiFi monitor and BLE scan phases, logging Pwnagotchi/Soul Cage peers, AirTag/SmartTag/Tile trackers, Flipper Zeros, card-skimmer BLE candidates, Meta/Ray-Ban glasses, Flock cameras, drone Remote ID beacons, and a general BLE/IoT wardrive feed. Safe to run anywhere.
- BADUSB — HID injection. The brain is suspended, WiFi attacks pause, and the USB stack reconfigures to a composite device (NCM ethernet + HID keyboard + HID mouse, optional mass storage). A short press cycles payloads; a double-tap arms and fires, but only after the Pi has confirmed HID enumeration on the target. The Ethernet HAT must be absent because the composite USB conflicts with the RNDIS interface.
- GAMER — Chocolate Doom streamed live to the WebUI. All RF pipelines suspend. Manual launch or auto-triggered when every queue is empty. The pet plays itself via the PPO Doom motor policy; the stream runs at 8 fps / 320×200, resource-capped at 40% CPU. Any field event (new AP, crack result, manual command) kills Doom Idle instantly.
- PAUSED — Manual control only. Brain idle, no scanning, no attacks. This is the mode-cycle entry point: single-tap cycles PAUSED → ATTACK → DETECT → BADUSB → PAUSED. Long-press inside PAUSED cycles themes.
Sub-modes (STA/WLK/DRV)
A mode says whatthe pet is doing. A sub-mode says how fast it's moving while doing it — and that changes which RF attacks are physically viable. Evil-twin captive portals need seconds of dwell on a target; deauth bursts need a stable RSSI; a drive-by can barely finish a single PMKID grab before the target is out of range. Rather than fail gracefully mid-attack, the brain refuses to sample phases that can't complete in the time available.
Movement is detected from phone GPS speed first, accelerometer and gyro as backup, and Wi-Fi scan velocity as a Pi-only fallback. Hysteresis prevents GPS glitches from flipping the state every few seconds.
- STA — Stationary(<1 km/h). Full depth. All 19 WiFi + 5 BLE phases legal, including long-dwell attacks: sustained deauth, evil twin, captive portal, SAE commit flood, AP clone spam, quiet-time inject, WPA-Enterprise evil AP, M2 rogue inject, and the full LAN pipeline on a crack. The brain is allowed to sample DEEP_ENGAGEMENT strategies.
- WLK — Walking (1–15 km/h). Medium depth. Deauth burst, WPS, PMKID, and reassoc inject remain legal; anything requiring sustained target proximity is masked out. Brain samples TARGETED_ATTACK instead of DEEP_ENGAGEMENT.
- DRV — Driving(>15 km/h). Passive only. Phase 0 (hcxdumptool) and Phase 1 (PMKID first, completes in under a second) are the only phases the constraint mask leaves open. Everything else is stripped out. Brain is restricted to HARVEST_SWEEP and STEALTH_HARVEST strategies.
How capabilities work
Every attack the pet can run goes through the same gate. When the brain ticks (roughly every 30 seconds), it loops over every AP it has ever seen in range, applies the constraint mask for the current mode × sub-mode × scope-flag × firmware-health combination, and samples a Thompson distribution over the surviving phases for that AP. The winner runs — once — and the outcome (captured, failed, blocked, timed out) feeds back into that AP's distribution for next time.
This is why the sections below read as a catalogue, not a program. The bandit doesn't execute steps 0 → 1 → 2. It picks one phase per AP per epoch based on what has worked, what's legal, and what it's never tried before. Phases with higher yield in your area rise; phases that waste time get starved. The 19 WiFi phases, 5 BLE phases, 7 LAN phases, and 5 BadUSB techniques below are the menu the bandit chooses from — not a sequence it marches through.
Red Team — Wi-Fi
The nineteen Wi-Fi phases span the full spectrum from zero-risk listening to aggressive active attacks. The brain groups them roughly as: observation (phase 0), clientless captures (phase 1 — PMKID, often a sub-second win), client-assisted captures (phases 2–5 — various deauth strategies that force an EAPOL handshake), legacy and configuration attacks (WPS Reaver, Pixie Dust, CSA injection), social-engineering captures (evil twin + captive portal, WPA-Enterprise evil AP, Karma AP), and denial / disruption primitives (beacon spam, SAE commit flood, AP clone spam, quiet-time inject, malformed management frames, probe request flood).
Phase 0 (hcxdumptool passive listen) is always on whenever the radio is in monitor mode — it costs nothing and collects any handshake that happens to be in the air. Every other phase is opt-in per AP, sampled by the phase bandit, and gated by mode/sub-mode/scope. The shape of a typical session: passive listen runs continuously; PMKID is tried early on every new AP (it's clientless, so it either works in ~1 second or fails and gets deprioritised); if PMKID fails and the AP has clients, the deauth family takes over; if the AP won't yield and scope allows, evil twin and CSA-based phases come into play.
Red Team — Bluetooth
BLE runs concurrently with Wi-Fi because it's a separate radio and a separate kernel stack — it doesn't compete for monitor-mode access. The five phases are: Sour Apple (iOS/macOS BLE spam causing the pairing sheet to pop on nearby devices), Swift Pair (Windows 10/11 equivalent), Samsung Fast Pair (Galaxy ecosystem), Spoof AirTag (broadcasts an AirTag ident that other Apple devices will surface), and BT Spam All(cycles all four simultaneously). All five are cosmetic-nuisance class — they don't pair, don't exfil, don't crack anything. They exist mostly as XP events and for drone/sensor differentiation in Detection's crowd-fingerprint mode.
Red Team — LAN Pipeline
Cracking a PSK is only the entry point. The moment a handshake becomes a password, that AP enters the LAN pipeline state machine: UNDISCOVERED → DISCOVERED → ENUMERATED → CREDENTIALED → EXPLOITED → EXFILTRATED → DONE. Each transition corresponds to a specific phase, and each phase is a real tool:
- L1 — nmap service enumeration. Discovers live hosts, open ports, service banners. Populates the target graph for every subsequent phase.
- L2 — Hydra credential brute-force. Targeted spray against discovered login surfaces (SSH, RDP, SMB, HTTP basic, Telnet) using a credential list and timing backoffs that avoid account-lockout.
- L3 — Gobuster web path discovery. Directory and virtual-host enumeration on discovered HTTP services. Feeds L4.
- L4 — SQLmap injection testing. Runs against web endpoints surfaced by Gobuster. Successful SQLi often short-circuits the rest of the pipeline.
- L5 — Responder NTLMv2 capture. Poisons LLMNR and NBT-NS queries to collect NetNTLMv2 hashes — the fast path to Active Directory credentials in Windows environments.
- L6 — secretsdump (SAM/NTDS).Maximum yield phase. With sufficient credentials, dumps the domain's SAM and NTDS databases. This is the reward peak of the pipeline — worth a +1.0 reward bump to the brain.
- L7 — Exfil / staged transfer. Anything worth keeping is staged, chunked, and transferred back to the pet — and onward to PC on next sync. Clean, verifiable, bounded by the scope flags set for that AP.
The pipeline only runs in DEEP_ENGAGEMENT (STA sub-mode), and only when the scope flags for that AP permit post-crack engagement. For most out-of-scope APs the pipeline stops at DISCOVERED — the crack is logged for XP and that's it.
Red Team — Bad USB
BadUSB is a separate mode because it rewires the Pi's USB stack — it can't coexist with the Ethernet HAT, and the composite device conflicts with the brain's normal host-PC link. When BADUSB mode is active the Pi presents as a combined HID keyboard, HID mouse, NCM ethernet adapter, and optional mass-storage device. Its five techniques are:
- B1 — DuckyScript runtime. Full v1 interpreter (STRING, DELAY, GUI, CTRL, ALT, arrow keys, modifiers). Short-press cycles payloads; double-tap fires.
- B2 — HID enumeration detect. Before firing any payload, the Pi confirms the target OS has actually enumerated the HID device. Stops the embarrassing case of a keystroke injection into a locked screen.
- B3 — PoisonTap network hijack. While the target is unlocked and plugged in, the Pi advertises a DHCP /0 route — hijacking all traffic through its ethernet interface — then DNS-spoofs common domains to harvest HTTP cookies and any cleartext responses. A classic trick with modern bite.
- B4 — Cookie exfiltration. Collected cookies are staged locally, then transferred to the operator on next sync. Isolated by iptables BADUSB_ISOLATE so the target is never bridged into your Wi-Fi.
- B5 — BLE HID keyboard. Wireless variant of B1 — pairs as a Bluetooth keyboard and delivers the same DuckyScript without the USB cable. Deferred to v2.
Blue Team — Sentry
Sentry is the mirror image of ATTACK. Same hardware, same brain loop — but the radio runs managed rather than monitor, every injection service is disabled, and the event catalogue is inverted. Instead of rewarding successful captures, Sentry rewards observed attacks against the network you're on. This is both a legal cover (a SENTRY-mode pet sitting on your home Wi-Fi is a home IDS, nothing more) and a different XP loop for players who want to run defense-side. The seven detection classes are:
- S1 — Port scan detection. SYN flood per-source windowing catches reconnaissance before exploitation starts.
- S2 — ARP spoof / MITM detection. Watches for duplicate ARP responses and gateway hijack patterns.
- S3 — Rogue DHCP server alert. Unexpected DHCP OFFERs on the local segment.
- S4 — Evil twin drift. BSSID/channel polling catches a rogue AP cloning your SSID.
- S5 — DNS poisoning. DoH cross-check against the configured resolver flags answer mismatches.
- S6 — File integrity snapshots. Scheduled checksum sweeps over critical paths on the pet itself.
- S7 — Scheduled sweeps. ASSET, EXPOSURE, INTEGRITY, and PERSISTENCE scans run on timers — catching slow-moving threats the real-time detectors miss.
Detection
DETECT mode is pure passive surveillance. The radio alternates between Wi-Fi monitor (Phase A) and BLE scan (Phase B) in short cycles; no packet is ever transmitted. What you get back is a map of the RF environment around you, fingerprinted down to device class where possible. Nine detectors run concurrently:
- D1 — Pwnagotchi / Soul Cage peer. Recognises the vendor IE both families advertise, lets your pet know another wardriver is in range (and triggers Proximity Encounters).
- D2 — AirTag / SmartTag / Tile. Three tracker protocols, fingerprinted on their advertising payloads. Useful for stalking-detection use cases; opt-out-able.
- D3 — Flipper Zero. Flippers have a characteristic BLE signature even when not actively transmitting.
- D4 — Card skimmer candidate. HC-03/05/06 BLE modules near payment terminals — classic skimmer hardware. Opt-in because of false positives.
- D5 — Meta / Ray-Ban glasses. Smart-glasses class, increasingly relevant.
- D6 — Flock camera probe. License-plate-reader fingerprinting. Useful for route planning through surveillance zones.
- D7 — Drone Remote ID. ASTM F3411 parser, both BLE and Wi-Fi variants. Shows you the drones around you, their operator ID, and flight paths.
- D8 — ESP/IoT wardrive. OUI-based density heatmap of ESP32 and common IoT vendors — surfaces cheap consumer devices for later audit.
- D9 — General BLE wardrive. Everything else with a MAC and an advertising payload, mapped by location.
How hashes are cracked
Capturing a handshake doesn't give you a password — it gives you a hash to crack. Soul Cage solves that at five levels of escalation, from instant on-device guesses up through a federated fleet, so that the fast cracks happen fast and the slow cracks happen at all. The format is always the same (.hc22000, hashcat's standard WPA representation), which means every tier plugs into the next cleanly.
- Tier 0 — Pi instant crack. On capture, the pet tries the handshake against a small ISP-default and regional-pattern wordlist it keeps in flash. If the AP uses a factory password (a huge fraction of residential Wi-Fi in most countries), this wins in under a second. Sharded across the fleet so each Pi carries a different slice of the common defaults.
- Tier 1 — PC SSID-derived. On next sync, your PC runs a pattern-aware mask against SSID-derived hypotheses (e.g. StreetnameRouter-style defaults, phone-number tails, address-based constructions).
- Tier 2 — PC local wordlist. The PC runs hashcat against OUI vendor masks, curated rule sets, and finally rockyou / SecLists-scale wordlists. GPU-bound; throttled on temperature. Tiers 0–2 catch the overwhelming majority of cracks.
- Tier 3 — Server cache. PwnHub maintains a cache of (hash → plaintext) pairs for every password any pet in the fleet has ever cracked. A fresh capture hits this first before burning Tier 4 compute; cache hits are free to you.
- Tier 4 — Distributed fleet. Tough remaining hashes are broken up and offered to idle PCs across the fleet as work units. Every PC that contributes cracking cycles earns credits and accelerates its own pending jobs; the system scales as O(1/N) with fleet size. Contributions feed back into Tier 3 for everyone. The longer the fleet runs, the smaller the set of hashes that no-one has cracked.
How the AI Works
There are three compute tiers, each solving a different problem with a different algorithm. The Pi is the real-time decision engine — it must act in seconds with no GPU and a ~100KB brain budget. Your PC is the batch learning layer — it has compute, historical data, and time to train proper ML models. The server is the fleet coordination layer — it aggregates outcomes from every device and hosts the battle system. None of the three could do the other's job.
Tier 1 — Pi Brain
The Pi brain is a 6-layer Hierarchical Bandit Brain — not deep RL. Deep RL needs millions of training steps to converge; a wardriving session produces 50–500 AP encounters per day. Thompson Sampling converges on the first few samples and runs in microseconds with no GPU.
Every ~30 seconds the brain completes one epoch: sense, score every known AP, pick one new action, manage background tasks. The decision ensemble (L3) blends five scorers — LinUCB (40%), Thompson Sampling (25%), Windowed Thompson with decay (20%), GPS zone prior (10%), time-of-day rate (5%) — then picks the highest-value legal action. Background slots cap what can run in parallel: one slot on the Zero WH, three on the Zero 2 WH. Hard memory limits are enforced before any subprocess launches.
Channel Bandit
A per-channel Thompson Sampling distribution (alpha/beta, channels 1–13) learns which channels yield handshakes in your area. State persists across reboots. Under-explored channels receive a time-decay exploration bonus so they are periodically revisited rather than permanently starved.
Phase Bandit
Each AP has its own Thompson distribution over 24 attack phases (19 WiFi + 5 BLE). A constraint mask removes physically impossible or policy-blocked phases before sampling — the bandit only ever considers legal actions. PC Model 2 pre-warms alpha values for new APs so the bandit starts informed rather than uniform.
AP Triage Tiers
- GOLD — Strong signal + multiple clients + WPA2 + not yet captured. Attack immediately.
- SILVER — Medium signal or few clients. Normal queue priority.
- BRONZE — Weak signal, barely in range. Low priority — attempted if nothing better available.
- EXPLOIT — PMKID seen in a prior scan but no full handshake yet. Targeted re-attack.
- SKIP — Blacklisted, already cracked, open network, WEP, or below minimum RSSI threshold.
Tier 2 — PC Brain
After each sync the PC reads trajectory logs, crack results, and field findings from the Pi. It trains six ML models offline, quantises them to int8 or float16, and deploys them back to the Pi on the next connection. Each model uses a different algorithm because each is a different kind of problem.
Model 1 — AP Vulnerability Predictor
numpy SGD · 7→32→16→1 sigmoid · ~94% accuracy after field data accumulates. Predicts the probability a given AP yields a handshake within 60 seconds. Label is binary — handshake yes/no — so supervised classification is the right tool. Output feeds the AP triage composite score as an additive component. Most reliable model because the label is clean and immediate.
Model 2 — Attack Phase Selector
PyTorch A3C · actor 52→128→64→27 softmax · int8 quantised for Pi deployment. Selects the optimal attack phase sequence for a given AP context. Supervised learning cannot work here — there is no label for the right phase. The reward arrives later: the crack either succeeds or it doesn't. A3C learns from multi-step trajectories (PMKID fail → deauth → EAPOL captured → cracked = +1.0) with delayed reward. The trained actor is int8-quantised and deployed to the Pi, where it pre-warms phase bandit alpha values for every new AP the pet encounters. Currently at random-baseline accuracy — improves directly with wardriving sessions.
Model 3 — Channel Yield Predictor
numpy SGD · 3→16→14 softmax · time_of_day + gps_zone + day_of_week → channel distribution. Predicts handshake yield across all 13 channels for a given time and place. Output merges with the live per-channel Thompson prior at 20% weight. Currently data-starved — improves as wardriving history accumulates time-of-day diversity.
Model 4 — Dwell Time Optimizer
numpy SGD · lookup table · 18 params · heuristic fallback when confidence is low. Recommends how long to dwell on each AP before moving on. The brain uses Model 4 first; if confidence is low it falls back to a heuristic. Combined with the channel bandit this means the pet learns both where to look and how long to wait.
Model 5 — Password Pattern Classifier
numpy SGD · 6→16→8→8 softmax · PC-side only, never deployed to Pi. Classifies expected PSK character distribution for an AP — ISP default pattern, common regional suffix, numeric-only, etc. Used by the PC's hashcat manager to select which OUI mask tier to prioritise first. Password cracking is entirely the PC's job — the Pi never runs this model.
Model 6 — Doom MotorController
PyTorch PPO · GRU trunk 64→128→128→12 · INT8 ONNX · 35 Hz on Pi. The real-time motor policy that drives the pet's Doom bot. Takes a 64-dim observation (game state + current goal) and outputs a 12-way action distribution. Uses PPO rather than A3C because it's a single-worker PC setup with dense shaped reward and a short motor horizon — PPO converges cleaner here. Crucially it trains entirely in ViZDoom simulation with no fleet data required, so it ships bundled in the image from day one and is updated via PC sync thereafter. On the Pi it runs via ONNX Runtime Lite at 35 Hz; a heuristic rule-tree fallback activates only if the model file is missing or corrupt.
Every model is versioned. A regression gate prevents a newly trained model from deploying if it performs worse than the previous version beyond a −2% tolerance. The Pi stores one previous generation as a fallback — if a deployed model fails to load or produces NaN inference, it rolls back automatically and flags the issue for the PC to re-export on next sync.
Tier 3 — Sync & Fleet
Each user's PC trains the MLP models (1–5) locally on their own Pi's data — no raw captures, handshakes, or GPS ever leave the device. Federation happens at a different layer: PwnHub runs a Federated PBT server that evolves bandit hyperparameters across the fleet using anonymised scalar exports only. The PC program runs six jobs automatically after each sync window:
- Job 1 — Sync: Bidirectional SSH/SCP sync — pulls handshakes, ap_database.db, fw_health.log from the Pi; pushes cracked PSKs, updated model weights, and the fleet wordlist back.
- Job 2 — Crack: hashcat against fleet.txt, OUI vendor masks, curated rules, then rockyou. Four launch tiers; GPU-monitored and throttled on temperature.
- Job 3 — Train: Models 1–5 retrained on the newly synced data. Crack results from Job 2 confirm the delayed rewards that Model 2 (A3C) needs before it can train.
- Job 4 — Deploy: quantise models to int8, write model_weights.h, SCP it to the Pi, trigger recompile over SSH. Pi inference is live on next session.
- Job 5 — Federated PBT:averaging every device's parameters drags strong local configs toward mediocre global means. Instead, Soul Cage uses Population Based Training (Jaderberg et al., 2017). Each Pi exports its LinUCB matrix (A, b), population/cluster/zone priors, hyperparameters (exploration coefficient, ensemble weights, prior strength, EWMA α, windowed-Thompson γ), and a fitness score computed from session rewards. PwnHub samples a 3-device tournament and — if your fitness lags the winner by 10%+ — responds with the winner's full config. Your PC then perturbs that config by ×U[0.8, 1.2] before applying it to the Pi. Top discoveries propagate through the fleet; diversity stays intact because no two devices end up identical. MLP weights (Models 1–5) are NOT federated — each PC trains those independently on its own Pi's data.
- Job 6 — Telemetry: CUSUM change-point detection on injection rates, DBSCAN crash fingerprinting, anonymised crash patterns contributed to Nexmon researchers. No BSSID, GPS, or PSK data ever leaves.
Fleet wordlist works the same way: every cracked PSK is contributed to fleet.txt — sorted by crack frequency across all devices. Every crack makes every other pet's next session faster. A clone starts with rockyou.txt. The fleet starts with every password our users have ever cracked.
API Reference
The Soul Cage public API is how integrations — PC Brain, third-party tools, and the Android companion — talk to the platform. All endpoints are HTTPS-only. Base URL: https://soulcage.win. The game server (UDP 9999) is a separate binary and is not documented here.
Authentication
Authenticated endpoints require a Bearer token in the Authorization header. Obtain a token by logging in at POST /api/auth/token with your email and password, or via the OAuth flow (Google / GitHub / Apple). Tokens are JWTs, expire after 30 days, and are scoped to a single account.
Authorization: Bearer <your-token>
POST/api/upload-csv
Upload a wardriving capture file. Supported formats: .csv, .pcap, .pcapng, .hc22000, .log (WiGLE-compatible CSV). Max file size: 35 MB. Auth required.
curl -X POST https://soulcage.win/api/upload-csv \ -H "Authorization: Bearer <token>" \ -F "[email protected]"
Response (synchronous — returns immediately with full stats):
{
"ok": true,
"aps_imported": 142,
"aps_new": 38,
"aps_reinforced": 104,
"aps_captured_from_rivals": 3,
"hashes_queued": 12,
"job_id": "job_abc123"
}GET/api/check
Check whether a BSSID is in the database, cracked, or opted out. No auth required — this endpoint is intentionally public so anyone can check their own network without creating an account. The response never reveals the plaintext PSK.
GET /api/check?bssid=AA:BB:CC:DD:EE:FF
// status values: "not_found" | "found" | "cracked" | "opted_out"
{
"status": "cracked",
"ssid_hint": "HOME-****",
"cracked_at": "2026-03-14T09:22:00Z"
}POST/api/opt-out
Remove a BSSID from the platform and add it to the fleet blacklist. No auth required. Submitting the same BSSID twice is a no-op. The server never confirms whether the BSSID was previously in the database (confirming presence is itself a privacy leak). Resolves within 24 hours.
curl -X POST https://soulcage.win/api/opt-out \
-H "Content-Type: application/json" \
-d '{"bssid": "AA:BB:CC:DD:EE:FF"}'{ "ok": true }The _nomap and optout_nomap SSID suffixes are honoured automatically — no API call needed for those.
GET/api/me
Returns the authenticated user's profile stats. Used by the Android app and third-party integrations (e.g. Biscuit). Auth required.
{
"handle": "ghost_operator",
"title": "Pentester",
"level": 162,
"xp": 44821,
"aps_total": 3847,
"aps_cracked": 291,
"personality": "Ghost",
"team": "Red Phantom",
"sudo_balance": 7500
}Rate limits
POST /api/upload-csv60 requests / hour per userGET /api/check120 requests / hour per IP (unauthenticated)POST /api/opt-out20 requests / hour per IPGET /api/me120 requests / hour per tokenRate-limited responses return HTTP 429 with a Retry-After header. Authenticated requests (Bearer token) get higher limits on all endpoints. If your use case exceeds these limits, contact [email protected].