Recorded demo. Every decision below came from the real gate on a Mac (Apple Vision OCR + Laya, local). The consent matrix and your answers are applied live here; the model itself is not running in this page.brew install fortunto2/tap/screenshield · uv sync · make run
Samples (all synthetic):
Your screen · never leaves this Mac
What the agent receives
Waiting for you
The model was not sure what these lines are. They stay blurred until you answer. Your answer becomes policy for this purpose.
Every line, every decision hover a row to find it on the screen
Your consent, per purpose
🔒 Credentials never leave, whatever you click. Detectors (keys, cards, amounts, injection) run before the model and cannot be overruled.
Consent ledger categories and outcomes only, never the text
← → or click · Esc to close
Your agent watches your screen. Who decides what it sends?
Computer-use agents, recall assistants, Claude over MCP: every screenshot goes to the cloud with whatever was open. A biopsy chat. A bank balance. An .env.
Consent today is a cookie banner. Nothing asks at the moment an agent takes your data.
ConsentShield
A consent gate between the screen and the agent, on the device.
frame → OCR on device (Apple Vision) → detectors first: secrets · cards · money · injection → local decision model (Laya, open Jev): category + confidence → your consent per purpose: assistant · analytics · training · 3rd party → ≥ 0.8: act alone · below: blur and ask you → agent gets the redacted frame · ledger records the decision
Live demo
Same screen, assistant vs training: different purpose, different frame
Model unsure → held blurred; one click decides the line, becomes policy, lands in the ledger as a human decision
"Ignore previous instructions…" never reaches the agent
0 bytes leave before the decision · ledger keeps categories, never text
Consent at the moment an agent acts
SDK / sidecar for agent vendors: one call before every screenshot or tool call
Consent ledger for GDPR, CCPA and the EU AI Act audits
Purposes are the language privacy platforms already speak, now enforced per frame
Ships as an MCP server today: claude mcp add consentshield, the agent's screenshot tool returns the gated frame
Next: Core ML model at 14 ms, signed consent receipts, per-agent identities