Stalkrr
Consent & recording law

Consent & recording law

What Stalkrr does and does not enforce.

Implementation note (2026-06, v3): The active implementation is the native-Swift app in ../app/ (app/Sources/StalkrrPipeline/{Consent,Redact}.swift). The shipped consent model is Terms-of-Service-based: on first run the operator accepts Terms confirming they have the right to record the people and screens they capture (recorded parties are deemed to have accepted per those Terms). The app therefore does not ship the per-participant prompt / all-party gate / regional engine described below — that stays as reference spec for a stricter future mode. What is shipped: on-device PII redaction of transcript text before any cloud egress (frames are not redacted), and full erase/forget (per-meeting or all data, in-app and via the MCP delete_* tools).

Consent is a first-class, non-optional requirement in Stalkrr — not a feature to add later. Recording meetings and voice calls triggers real legal obligations, and open-sourcing the client earns your user's trust but not the other participants' consent. Done well, respectful consent is also a differentiator: Stalkrr is the one that asks.

Stalkrr is "the transparent surveillance you actually own." Transparency only works if the people in the room know they're in the footage.

The legal surface (why this is table stakes)

First-class requirements

These are enforced (or, where stubbed, explicitly asserted) by the consent gate in packages/client/src/consent and the redact stage in packages/client/src/redact.

1. Consent prompt

Capture must not begin until consent has been gathered for the session. The default policy is conservative: capture is permitted only when every resolved participant has explicitly granted consent. The gate returns granted only in that case; otherwise capture is blocked.

2. "This is being captured" disclosure

All participants must receive a clear, timely disclosure that capture is happening — e.g. a join-time notice, an in-meeting banner, or an audio cue — before capture starts. (discloseCapture() is the hook; currently stubbed.)

3. Per-participant opt-out — NOT IMPLEMENTED

Individual participants cannot currently be excluded. There is no UI or API to opt a participant out: transcript speakers are only "me"/"them", the consent gate never blocks anything, and the redact stage drops nobody's speech. Recording is all-party, under the operator's Terms acceptance. A real implementation — speaker diarization plus a per-recording "exclude this speaker" action that removes their lines, scrubs their audio spans, and re-runs extraction — is a planned follow-up; this document will change when it ships.

4. Regional handling

Each session carries a coarse region. The consent gate must map the region (and participants' regions) to the strictest applicable rule set:

When in doubt, fail closed (treat as the strictest regime).

How the design supports compliance

Status (v3)

Shipped: ToS acceptance gate (first run), on-device PII redaction of transcript text before egress (frames are not redacted), and erase/forget (per-meeting + all-data, in-app and via MCP delete_*). The all-party consent gate, per-participant disclosure UI, and regional policy engine above are reference spec for a stricter opt-in mode — not the shipped model. Per-participant opt-out is not implemented: no participant can be excluded from a recording today; speaker diarization plus a per-recording "exclude this speaker" action is a planned follow-up. None of this is legal advice — operators are responsible for compliance in their jurisdiction.