Inspiration

Autonomous coding agents now run with full shell, database, and cloud access. One hallucinated rm -rf, DROP TABLE, or terraform destroy can wipe production in milliseconds, and most agents have no human remote control.

We built KillSwitch AI as the missing remote control: one safety bridge that sits between every agent and the terminal, so nothing destructive runs without you knowing first.

What it does

KillSwitch AI is a remote-control safety gateway for autonomous terminal agents.

  1. Intercept — Every command is held at the gateway before it executes.
  2. Score — Inline heuristic engine rates each command 0–100 using blast radius, auth, and history → Safe (0–39) / Verify (40–74) / Block (75–100).
  3. Steer — Safe work auto-flows: Liam Agent · AWS EC2 scale-down, Risk 18 → Approved.
  4. Terminate — AutoDev · DROP TABLE users; (Risk 94) is INTERCEPTED; Agent-04 · rm -rf /var/log (Risk 91) is KILLED BY OPERATOR. ⚡ Simulate Rogue Agent Command fires rm -rf /database/backups (Risk 98/100 CRITICAL) — you choose ⛔ Kill Session (Agent Terminated, counters update) or ✓ Approve under your name.

Live ticket tracks 99.4% malicious actions prevented, with intercepts / kills / approved counters and tamper-evident audit stamps.

How I built it

Single-file, zero-backend app: one index.html with inline CSS + Vanilla JavaScript, Tailwind CSS CDN, and Google Fonts (Newsreader, Plus Jakarta Sans, JetBrains Mono). No framework, no bundler, no build step — double-click the file via file:// to run.

Demo media is fully automated: Edge-TTS narration (en-US-ChristopherNeural, scripts/make-voiceover.py + System.Speech fallback), headless Playwright + Chromium capture (scripts/record-demo.py), and imageio-ffmpeg mux into demo_with_audio.mp4.

Challenges I ran into

  • Simulating out-of-band kill signals without a backend: a held command, pulsing CRITICAL card, beep, risk bar, and two-button decision flipping state to Agent Terminated — all in plain JS.
  • Real-time evaluation in ~12ms client-side: fast heuristics (blast, auth, history) instead of an LLM call, keeping stream, terminal, and counters in sync.
  • Demo sync: first Playwright capture was 35s vs 95s narration and would have truncated the voiceover. Fixed with an 80s silent capture + tpad=stop_mode=clone freeze-pad to full narration length.

Accomplishments I'm proud of

  • Sub-50ms latency scoring (p99 ~12ms) in the browser.
  • Zero-backend deployment: no Node.js, no npm install, no server.
  • Polished operator experience: ● Gateway Online ticket, live stream (Approved 18 / INTERCEPTED 94 / KILLED 91), and a working Kill/Approve loop.

What I learned & what's next

Inspectable heuristics beat black-box scoring for trust — showing risk number, lane, and reason makes operators act faster. Removing the backend removed all setup friction.

Next: authenticated operator sessions with out-of-band kill on real hosts, signed audit storage, and a VPC POST /score service wrapping the same scorer. Then team policies, dry-run sandboxing, and Slack/PagerDuty escalation for VERIFY commands.

Built With

  • and-google-fonts-(newsreader-serif
  • edge-tts
  • ffmpeg
  • google-fonts
  • html5
  • jetbrains-mono-terminal).-no-framework
  • no-build-step;-it-runs-by-double-clicking-the-file-via-`file://`.-risk-engine:-inline-heuristic-scorer-in-the-browser-(pattern-rules-+-blast/auth/history-weighting-?-0?100)
  • no-bundler
  • playwright
  • plus-jakarta-sans-ui
  • so-the-demo-runs-fully-offline-and-maps-1:1-to-a-production-`post-/score`-endpoint-in-a-vpc.-media:-edge-tts-narration-(`en-us-christopherneural`
  • tailwind-css
  • tailwind-css-cdn
  • vanilla-javascript
  • zero-backend-app-to-prove-the-core-idea-with-zero-setup-friction.-frontend:-one-self-contained-`index.html`-?-inline-css-+-vanilla-javascript
Share this project:

Updates

Submission history