uttrflow / uttrflow/uttrflow-swift

The AI suggestions switch says it completes lines you typed before, but it also reads the screen around the field and writes new text

Open Beginner friendly
#545 0 comments 0 reactions 0 assignees View on GitHub
area:ai-suggestions documentation enhancement P2
Dominant language
Swift
Stars
4
Forks
17
Avg merge
3h 32m
Merged PRs (30d)
277

Description

## What happens

The AI suggestions switch and its privacy callout describe a feature that only replays your own lines. The feature also reads the text on screen around the field and writes new text with a local model.

The Settings copy (`Sources/UttrflowUX/SettingsPresenter.swift:361-381`):

- switch: "Finish what I am typing". Explanation: "Uttrflow completes lines you have typed on this Mac before. Off until you ask for it."
- callout: "Completions come from what you have typed on this Mac, kept in Uttrflow's own folder. Nothing is uploaded, and a password field is never read."

What turning it on does:

- reads the focused field's full value, window title and document on each turn (`Sources/UttrflowContext/FocusedFieldReader+System.swift:117-161`)
- walks the window's Accessibility tree for the text *around* the field, such as a chat thread or a page, and hands it to the model (`FocusedFieldReader.surroundings`, `:94-114`; `SuggestionCoordinator.situation`, `Sources/Uttrflow/Suggestion/SuggestionCoordinator.swift:519-538`)
- has the local model write completions never typed before (`SuggestionCoordinator.generate`, `:409-505`), after a ~3 GB model download (`SettingsPresenter.suggestionModelBanner`, `Sources/UttrflowUX/SettingsPresenter.swift:385-421`)
- records committed lines per application once consent is recorded, which the coordinator does automatically when capture first asks (`SuggestionCoordinator.swift:577-579`)

All of it stays on the Mac, which the callout says truthfully. But "completes lines you have typed before" is not what the user is agreeing to.

## Why it matters

This is the consent screen for a feature that reads other applications' screens. People decide to turn it on, or keep it off in some apps, based on this sentence. Under-describing what is read undermines the trust the local-only promise builds.

## Acceptance criteria

- The explanation says, briefly and plainly, that it reads the text in and around the field you're typing in, uses an on-device model to suggest, remembers lines you send, and never uploads anything.
- It keeps the password-field sentence, and says where to turn it off per app and how to forget.
- The README privacy section, if it describes AI suggestions, uses the same wording. Copy tests in `Tests/UttrflowUXTests` are updated.

Contributor guide

Open the contributing guide

Research direction

Start with the Settings copy in Sources/UttrflowUX/SettingsPresenter.swift:361-421, then review the related behavior in FocusedFieldReader+System.swift and SuggestionCoordinator.swift. Update the consent wording, README privacy section if needed, and copy tests in Tests/UttrflowUXTests so they cover the described data access, local suggestions, per-app controls, forgetting data, and password-field protection.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, swift
Domain
desktop, documentation
Issue type
Documentation
Difficulty
2/5
Estimated time
Half a day
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
84/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.