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.
- Intercept — Every command is held at the gateway before it executes.
- Score — Inline heuristic engine rates each command 0–100 using blast radius, auth, and history → Safe (0–39) / Verify (40–74) / Block (75–100).
- Steer — Safe work auto-flows: Liam Agent · AWS EC2 scale-down, Risk 18 → Approved.
- Terminate — AutoDev ·
DROP TABLE users;(Risk 94) is INTERCEPTED; Agent-04 ·rm -rf /var/log(Risk 91) is KILLED BY OPERATOR.⚡ Simulate Rogue Agent Commandfiresrm -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=clonefreeze-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 Onlineticket, 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
Log in or sign up for Devpost to join the conversation.