uttrflow / uttrflow/uttrflow-swift

The clipboard panel, the History page and the suggestion overlay are not kept out of screen sharing or recording

Open
#660 0 comments 0 reactions 0 assignees View on GitHub
area:clipboard enhancement needs-info P0 security
Dominant language
Swift
Stars
4
Forks
17
Avg merge
3h 32m
Merged PRs (30d)
277

Description

## What happens

No window in the app sets `NSWindow.sharingType` (a search of `Sources/` finds nothing), and nothing checks whether the screen is being captured. The windows that show user text are:

- the clipboard panel (`Sources/Uttrflow/Panel/QuickPanelController.swift`), which lists recent clips including pictures, and shows a revealed secret in clear;
- the main window (`Sources/Uttrflow/Main/MainWindowController.swift`), whose Home and Dictation pages list recent transcripts;
- the AI suggestion overlay (`Sources/Uttrflow/Suggestion/SuggestionPanelController.swift`), which draws text built from earlier lines typed in that field.

`Docs/clipboard-secrets.md:5` names the risk itself ("a panel opened in meetings and on recorded…"), but the only mitigation is masking detected secrets. Ordinary clips, pictures and transcripts are drawn in full.

## Why it matters

The panel opens with ⇧⌘V, a shortcut people press from muscle memory, including during a screen share or a recorded demo. One press shows the last several things copied (addresses, messages, screenshots) to everyone watching, and a recording keeps them.

## Decision needed

1. Set `sharingType = .none` on the panel (and possibly the overlay and main window). Note that on recent macOS versions, ScreenCaptureKit-based capture does not honour `sharingType` for every client, so this is partial protection. It needs checking on macOS 14, 15 and 26 with a screenshot, a QuickTime recording and a video-call share.
2. Or detect an active capture (for example, the screen-recording indicator state, which has no public API, or `CGWindowListCopyWindowInfo` heuristics) and open the panel with every row masked.
3. Or offer a "Hide clipboard contents while sharing the screen" setting and document the limits.

## Acceptance criteria

- The decision and its measured behaviour per macOS version and per capture method are recorded in `Docs/clipboard-secrets.md`.
- Whatever is chosen is covered by a unit test on the window configuration, plus a manual check list in `Docs/ui-tests.md`.

Contributor guide

Open the contributing guide

Research direction

Start with Sources/Uttrflow/Panel/QuickPanelController.swift, Main/MainWindowController.swift, and Suggestion/SuggestionPanelController.swift, then read Docs/clipboard-secrets.md and Docs/ui-tests.md. Resolve which protection approach is feasible and measure it on macOS 14, 15, and 26 with the listed capture methods. Done means the decision, measurements, window-configuration test, and manual checklist are recorded.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, swift
Domain
desktop, documentation, security, testing
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
28/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.