← Home
2026-10-09 written 2026-10-26 hackathonsecuritydlpvideoocragentsclickhouserust

ScreenShield: DLP for screen recordings

Is your screen safe? 40 laptops in the room, every screen readable by any phone camera

ScreenShield took 3rd place out of 78 projects as the only one that treated video as an attack channel, and its best moment was unscripted: an iPhone pointed at the venue’s own Wi-Fi slide gave 22 detections in 20 seconds and a blurred password. Two of the mechanisms I pitched are weaker than the slides. The gate that blocks a tool call copied from the screen is unit-tested but never wired into a running path, and the ClickHouse figures were measured on 6 million synthetic rows.

The short version

The event

The Cyberdefense Hackathon ran on Friday 9 October 2026 at the AWS Builder Loft on Market Street in San Francisco, as part of SF Tech Week, hosted by tokens&. Hacking started at 11:00, projects were due at 16:30, finalist demos and judging followed at 17:00 and awards at 19:00. There were four tracks (threat discovery, attack intelligence, autonomous remediation, continuous defense) and eleven judges from Pi, OpenAI, Guild.ai, AWS, Akash, ClickHouse, Semgrep, Airbyte, FlowiseAI and Visibl. I entered threat discovery plus continuous defense, solo.

Every lecture hall, boardroom and webinar records a screen, and screens show API keys, passwords, grades and email addresses. That is the leak going out. The same frames carry things coming in: QR codes aimed at viewers and instruction text aimed at the AI agents that now watch camera feeds through MCP. Nobody watches the recordings for any of it, because a leak is the presenter’s mistake and nobody reports it to the vendor of the capture hardware.

What I built

Two loops at two speeds in one Rust binary, shield. Mixing them was my first mistake that day, and the architecture note from 15:25 says so.

Under it: a Python reference implementation that reads the same fixtures and serves as the test oracle, 41 tests, a Next.js archive dashboard, and ClickHouse run locally with 6.0 million synthetic keyframe rows ingested at about 115,000 rows per second, where the three fleet queries (a secret held on screen, one QR across 31 rooms, frame text followed by a blocked tool call) answer in 26 to 34 ms.

Where it is weak

Demo and result

The day in 8:31: what I built · other finalists · my pitch · judges’ questions · prizes.

The Wi-Fi slide scene made the video. On stage, in slot 59, I pitched live from the dashboard’s live page; Chrome had blocked the camera for the local address, so the server-side stream fallback ran.

Judges’ feedback, given before I went on stage: make it easy for the community to install. The same evening it got shield run --in X --out Y (stream in, stream out, one second behind the input so the blur lands before a frame leaves, with a three-second hold after the last detection), a Homebrew formula, a release with an Apple-silicon tarball, and a Claude Code plugin with a skill.

Result: 3rd place overall, $400 from the top-overall prizes (announced at 7:36).

What the other teams built

Tool tags across the gallery: ClickHouse 65, Semgrep 54, Guild 39, Akash 38. The clusters:

Cluster Projects
Guard AI agents at runtime: MCP gateways, tool-call gates, injection containment 29
Find, fix, verify, open a PR (Semgrep finds, an LLM fixes, ClickHouse logs) 14
Honeypots, red team, evals 7
Protect content or people rather than code or agents 7
Telemetry, SOC, cloud 6
Other 10

Most of the field built one of two shapes. The ones I ranked highest, judged on the pitch and its stated evidence:

Four projects used a decision model like TypeSafe’s Jev, and in all four it judged and never acted.

What I took: re-check an MCP tool’s definition on every call, not only at approval (Sauron); replay the archive through new rules before shipping them, the way Security Twin attacks a clone instead of production; and a “verified, present, inconclusive” status for findings (StackWatch).

What I took from it

How this was put together

Written from my notes of the day (up to the result), the submission and architecture docs, the reviewer agent’s list of open issues, and the public repo’s code, re-read on 26 October. At 16:40 I scraped the project gallery and read one-liners, tool tags, and the repos and videos where I opened them, so the section on other teams is a read of the pitches, not a code review. Six more projects arrived after that scrape, for 78 in the end.

That reuse: superset-hackathon-consentshield-2026 installs ScreenShield’s OCR helper with brew and copies its detectors. The same “brake outside the model” showed up across the eight finalists at dell-nvidia-gb10-hackathon-2026. The responder runs on sgr-agent, the agent core behind pac1-competition-retrospective. Every event: hackathons.

Links: repo · film of the day, 8:31 · demo video, 94 s · project page · related: agent-sandboxing.

Related