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
- 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
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