The deck's gate, on your desk. A desk-side M5Stack CoreS3 that mirrors the Warlock engagement gate — SAFE, staged, or ARMED — and lets you ARM a scoped engagement, END it, or hit the KILLSWITCH with a physical tap. A hacker-HUD of the deck's posture, pairing straight to the deck over Bluetooth.
01 // a tactile authorization surface
Warlock's whole safety model is the engagement gate: offense is inert until a human arms a scoped engagement, and a kill switch reaches every queue. Warlock Buddy puts that gate on a small screen on your desk — at-a-glance posture, and a deliberate, tap-twice control to arm or abort.
A hero banner reads SAFE (green), ARMED (red, pulsing), staged (amber), or OFFLINE — so you know the deck's state without unlocking anything.
ARM a pre-staged engagement, END the active one, or fire the KILLSWITCH — each a deliberate tap-twice confirm. A real arm switch and panic button for offensive ops.
Every action rides the same audited endpoints the Warlock web UI and TUI already use. The buddy adds zero new backend — and every armed action is still a signed attestation.
02 // how it connects
A small Bun bridge relays between the buddy and the Warlock API. Run it on the deck itself — the CM5's onboard Bluetooth pairs to the buddy directly, no second machine — or on any nearby host in BLE range.
# the relay, in one line → CoreS3 — BLE (Nordic UART) — bridge (on the deck) → bridge — localhost HTTP — Warlock API → tap ARM / KILL → POST to the deck's audited gate.
The deck carries two Bluetooth radios (the CM5's BT 5.0/BLE and the AC1200's BT 5.2), so the buddy uses the onboard radio while the attack Wi-Fi stays on monitor-mode duty. The full radio map is in the deck's hardware spec.
03 // what it shows you
A black-CRT, phosphor-green readout: one hero banner for the gate, a telemetry grid for the deck.
| Readout | What it tells you |
|---|---|
| Gate banner | SAFE · ATTENTION (engagements staged) · ARMED (live, pulsing warning) · OFFLINE |
| Engagement | The active engagement's name + scope cardinality (ssid / bssid / cidr) |
| SIGILS | Count of signed AAR attestations the deck has emitted — provable conduct, at a glance |
| Deck telemetry | CPU temp, CPU %, memory %, mesh node count, GPS fix, SDR count |
| Uplink | Heartbeat age — confirms the bridge link is alive |
| Touch zones | Context-aware: ARM / NEXT when staged, KILL / END when armed, MENU always |
04 // the build — build-your-own
An off-the-shelf M5Stack CoreS3 and a tiny bridge daemon. Flash the firmware, run the bridge on the deck, pair.
| Component | Detail |
|---|---|
| Host | M5Stack CoreS3 (ESP32-S3, 320×240 capacitive touch, speaker, IMU) |
| Link | Bluetooth LE — Nordic UART Service (JSON), CoreS3 ⟷ bridge |
| Bridge | Bun + noble — runs on the deck (systemd, CM5 onboard BT) or a host in BLE range |
| Firmware | Arduino / PlatformIO (M5Unified); build-your-own from documented source |
| Roadmap | On-device LLM "ask the deck" via the stacked Module-LLM (AX630C) over UART |
Same posture as everything under the umbrella: the buddy only ever calls the deck's existing gated, audited endpoints — it can't do anything the operator couldn't already authorize.