The sword that glows
when foes draw near.
Active defense for public and unsecured Wi-Fi. Glamdring watches an open network for the classic attacks, hardens your laptop so you can use that network with mitigated risk, and reacts to attackers — fast and disruptively, inside your own boundary, and never by hacking back.
Up in one paste.
macOS on Apple Silicon. Paste this in Terminal — it downloads the app, verifies it against a
checksum pinned in the script, and installs it to /Applications. No password, no
cloud account, nothing to sign up for.
$ curl -fsSL https://thot.ai/glamdring/install.sh | sh
Verify it yourself. The archive
(Glamdring-macos-arm64.tar.gz) has sha256
567cba81e6d03d8e355a2b0a5ce7d43894b11b3ce69636adf617a4ef4899fba2.
The installer pins that exact value and refuses to install anything that doesn't match — and
because the script is served from thot.ai while the binary lives on GitHub, a tampered
download can't quietly ship its own checksum.
This build is ad-hoc signed and not yet notarized by Apple;
installed with the one-liner above it launches normally (a curl+tar
install carries no Gatekeeper quarantine), and we'll say so plainly rather than pretend
otherwise.
Prefer to do it by hand?
Use the open network, with the risk mitigated.
On an unsecured network, anyone else connected can try to get at your laptop. Glamdring gives you a sensor for each classic move, a honeypot for what the sensors miss, and a hardening auditor that shrinks the attack surface before any of it starts.
🛰️ Detect
Sensors for ARP spoofing / MITM, evil-twin APs, rogue DHCP, DNS hijack, deauth floods, LLMNR/mDNS poisoning, and port scans — the whole open-Wi-Fi playbook.
🕸️ Deceive & tarpit
Decoy services and an AI tarpit maze hang an attacker's scanner and automation on your own sockets — burning their throughput and worker threads, on hardware you own.
⛓️ Contain
Blackhole a proven attacker at your local firewall, pin the real gateway's MAC so forged ARP is ignored, and — if you opt in — drop the Wi-Fi radio on a critical attack.
🛡️ Harden
A read-only posture audit scores this laptop and tells you, plainly, whether a script kiddie could get in — then closes the gaps only after showing you the exact commands.
🖥️ A real desktop app
A native macOS app with a live dashboard: a Wi-Fi panel that flags open networks, big counters for scans / intrusions / blocks, and native alerts when the window isn't focused. The server is loopback-only — 127.0.0.1, never routable off your machine.
🔒 Yours alone
Everything runs locally. No cloud service to trust, no account, no telemetry; the evidence log never leaves your laptop. Free and open-source under the AGPL-3.0 license.
No hack-back — offense is unrepresentable.
Glamdring defends inside its own boundary only: it detects, deceives, tarpits, hardens, and
blocks — on this host and this link. It never attacks, floods, damages, or
exploits a remote machine, including an attacker's. That's not a missing feature — hacking
back is a crime under the U.S. CFAA, the UK Computer Misuse Act, and equivalents worldwide,
even when you were the victim first. So the codebase makes offense impossible to
express: every response action is tagged SELF_HOST or NETWORK_EDGE,
there is no REMOTE boundary, and the policy engine rejects anything else. What
you get instead is aggressive, legal disruption:
| You might want to… | Glamdring does this instead — legal, effective |
|---|---|
| "shut the attacker down fast" | Tarpit — hangs their scanner on our own sockets |
| "cut them off" | Local firewall blackhole of the attacker at your edge |
| "get me off this bad network" | Auto-disconnect your Wi-Fi radio on a critical attack (opt-in) |
| "trap the AI scraping me" | AI tarpit maze — an endless deception that burns their compute |
| "stop the MITM" | ARP pinning — nail the real gateway MAC so forged replies are ignored |
Score your laptop
glamdring posture audits your Mac read-only and scores it. Passing the baseline set is what moves you out of a casual attacker's easy reach.
Example output. Hardening never changes a setting on its own — audit is read-only, and harden --apply shows the exact commands and asks first.
Two safety invariants, in code & tests
Only proven IPs are ever blocked. Auto-blocking fires only for a completed TCP handshake to us (honeypot / AI-tarpit / canary). Packet-based detections (ARP/DNS/DHCP/LLMNR/port-scan) carry forgeable source IPs — they alert, tarpit-flag, and pin the gateway, but never drive a by-IP block. Prevents self-DoS and being weaponized to blackhole a third party.
The gateway and your own host are never blocked. Resolved independently of any sensor, so the guard holds even if detection is misconfigured.
Response is dry-run by default; --apply (and root, for firewall/ARP) enacts. Modes: observe · contain (default) · aggressive.
Defense that stays honest under pressure.
Glamdring is built on the same conviction as everything Thot makes — we don't fake the wonder, we derive it. Here that means a security tool whose limits are load-bearing.
01 Your boundary is the whole boundary
The right to defend yourself does not extend to attacking back. Glamdring acts only on your machine and your link — and the code makes anything else impossible to express, not merely discouraged.
02 Risk is mitigated, never "solved"
No tool makes an open network safe. Glamdring is honest about that: it raises the bar high enough that getting past it takes a real professional, and it tells you loudly when someone is trying.
03 Nothing leaves your laptop
No cloud to trust, no account, no telemetry. The engine, the dashboard, and the evidence log all live on your machine. Trust is not required because nothing is sent.
04 Disruption without destruction
Tarpitting is the honest version of "fast and disruptive": it destroys the attacker's throughput and worker threads by making them wait on you — all on hardware you own, harming no one else.
Every principle, enumerated — and either applied or marked N/A, honestly.
Thot builds to a written discipline called the Web of Responsibility. In its vocabulary a thread is a principle; a knot is the concrete mechanism that ties it to reality — a test, a gate, a header, a design constraint. An unknotted thread is a wish. Below is the whole web walked against Glamdring and this page. Where a thread doesn't apply, we say so and why, rather than claim a checkmark we didn't earn — that honesty is itself the standing rule.
Threads this app & page actively honor
The principles from the web that a free, local, open-source macOS app can hold — each with the knot that holds it and how you can check.
| Principle | How Glamdring applies it — the knot | Verify |
|---|---|---|
| No offensive action AppliedLeast-privilege · bounded autonomy (OWASP LLM06) | Every response is tagged SELF_HOST/NETWORK_EDGE; no REMOTE boundary exists, so hack-back is unrepresentable. Response is dry-run by default; the Wi-Fi auto-disconnect is opt-in. |
Read response/policy.py; the test suite proves offense is rejected. |
| Fail closed AppliedFail securely on missing/bad input | The installer aborts if the download's sha256 doesn't match the pinned value. In the engine, only handshake-proven IPs are blocked, and the gateway/self are never blocked even if a sensor misfires. | Tamper with the archive → install exits non-zero, nothing lands. |
| Install integrity AppliedReleased installs verify a sha256 manifest | The one-liner's checksum is pinned in a script served from thot.ai — a different origin than the GitHub-hosted binary — so a swapped binary can't ship a matching checksum. The hash is printed on this page too. | shasum -a 256 the archive; compare to the value above. |
| Security-headers baseline AppliedRule 4 of the operator canon | This /glamdring surface ships a Content-Security-Policy plus X-Content-Type-Options, Referrer-Policy, and frame-ancestors 'none' — the page loads no third-party scripts and no inline JS. |
curl -I https://thot.ai/glamdring |
| Secret hygiene — nothing leaves the origin AppliedData-leak prevention · telemetry minimization | The app runs entirely locally behind a loopback-only server; the evidence log never leaves the machine. This page sets no cookies, collects no form data, and phones no analytics of its own on the /glamdring route. |
Watch the network tab — no off-box requests from the app. |
| Copy honesty AppliedClaims must match the engine actually running | "Free" is true here — Glamdring is AGPL-3.0 licensed, not a trial. The not-yet-notarized status is disclosed up front, the posture score is labelled an example, and every capability on this page traces to the shipped README and code. | Cross-check any claim against the linked source repo. |
| Error messages that don't leak AppliedRule 11 — actionable, not sensitive | The installer's failures are specific and safe ("checksum mismatch — refusing to install", "no write access to /Applications") with a next step, and never echo secrets or internal paths beyond the temp dir it created. | Run it offline → a clear, bounded error. |
| Accessibility as a floor AppliedWCAG 2.2 AA intent | Semantic landmarks and headings, keyboard-operable nav, visible focus, near-black/AA-contrast text, and every animation gated behind prefers-reduced-motion. |
Tab through the page; enable Reduce Motion. |
Built to the Loom — the eight-station discipline
The web also governs how software is made. Glamdring was built through the same loom: state written down, work decomposed into small visible cards, each with an executable acceptance proof, adversarial review, and an owner's manual shipped with it.
State, not memory
Every session orients from a written headline before acting — no station is skipped because nobody remembers which one you're on.
Small, visible cards
The app grew as tracked tasks (GLAM-t1…t9), each with a Stop condition marking a clean, defensible place to pause.
Acceptance is executable
126 tests cover every sensor, the scoring logic, and — above all — the safety invariants: gateway never blocked, offense unrepresentable, observe mode changes nothing.
The owner's manual ships
This page, the README, and the in-app doctor/version commands explain how it works and state the legal boundary out loud.
Threads that are N/A — by design, and why
Much of the operator canon governs a hosted SaaS with a database, accounts, and payments. Glamdring has none of those: no server it owns, no user database, no accounts, no billing, no PII at rest. Rather than fake compliance, the web's own rule says to name the gap — so here it is, plainly.
- Row-Level Security — no database to secure. N/A
- Rate limits / spend caps — no metered API or paid lane to protect. N/A
- CAPTCHA & CORS lockdown — no public forms or cross-origin API on this page. N/A
- Auth failure-path tests — there is no login, reset, or session. N/A
- Step-up (sudo) re-auth — no billing, key-reveal, or account deletion to gate. N/A
- Idempotency keys — no payment or webhook mutations. N/A
- 3-2-1 backups & restore drills — no server-side user data to back up. N/A
- Privacy policy / data-residency — no personal data is collected or stored to govern. N/A
One honest loose end we're not hiding: Glamdring is ad-hoc signed and not yet notarized by Apple, and there's no Intel build yet. Those are on the roadmap; until then the page and installer tell you exactly what you're getting. That is the web's standing rule at work — when a thread is found bare, you name it, you don't paper over it.