microsoft / microsoft/skill-recorder
Proactively request OS permissions during onboarding/install instead of mid-recording
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 4k
- Forks
- 412
- Avg merge
- 3h 16m
- Merged PRs (30d)
- 10
Description
Problem
Right now the app relies on macOS surfacing permission prompts lazily, mid-recording, the first time a collector touches a protected resource (Screen Recording, Automation/Apple Events, Accessibility). This is a poor experience and a correctness risk:
- The prompt interrupts the very session the user is trying to record.
- The permission dialog itself gets captured as noise in the recording (observed: a
UserNotificationCentersegment at ~4–7s of session20260725-002501-9579844b, showing the macOS Sequoia screen-recording consent dialog). - If the user dismisses/denies, collectors silently capture nothing (same class of silent blind spot as the un-installed terminal shell hook).
- Screen Recording in particular cannot be granted from the prompt button alone — it requires a manual toggle in System Settings + an app restart, so a mid-recording prompt basically guarantees a failed first session.
Key finding to design around: the grant follows the responsible process
macOS attributes a protected request to the responsible process (the launcher), not our binary. Evidence from testing:
- Launched via GitHub Copilot.app -> responsible process = Copilot (already authorized) -> no prompt, silent success.
- Launched via Terminal.app -> responsible process = Terminal -> macOS Sequoia periodic re-authorization fired, and the dialog named "Terminal", not "Electron"/"Skill Recorder".
- The shared, ad-hoc-signed dev identity
com.github.Electronnever appears in the new Sequoia screen-capture flow.
Implication: a shipped, signed Skill Recorder.app launched by double-click becomes its own responsible process -> real users will get these dialogs naming "Skill Recorder", and macOS Sequoia will periodically re-prompt for Screen Recording even after it's granted.
Proposed direction (design later)
Build a first-run / onboarding permission flow (tie into the existing privacy-doctor/electron/doctor.ts work):
- On install/first launch, detect current authorization status for each capability the selected capture level needs (Screen Recording, Automation per target browser, Accessibility).
- Explain why each is needed, then proactively trigger the request up front — before the user ever hits Start.
- For Screen Recording, deep-link the user to
System Settings -> Privacy & Security -> Screen Recordingand guide the restart-to-apply step. - Re-check status on every launch and before each recording; if a required grant is missing for the chosen level, warn (and offer to open the relevant Settings pane) instead of silently capturing nothing.
- Account for Sequoia's periodic re-authorization so it doesn't fire mid-session.
Notes / open questions
- Windows has an analogous but different story (UIA/graphics-capture consent) — the onboarding flow should be cross-platform.
- Consider having the describer/segmenter recognize and skip permission-dialog segments (
UserNotificationCenter) as noise regardless. - APIs to investigate on macOS:
CGPreflightScreenCaptureAccess/CGRequestScreenCaptureAccess,AXIsProcessTrustedWithOptions, and Apple Events authorization (AEDeterminePermissionToAutomateTarget).
Filed from testing session 20260725-002501-9579844b.
Ported from https://github.com/adilei/skill-recorder/issues/1 (originally opened by @adilei on 2026-07-24).
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the existing privacy-doctor and electron/doctor.ts work, then trace how onboarding and recording startup currently check permissions. Map the requested macOS capabilities and the cross-platform permission differences before choosing the flow. Done means required permissions are explained and checked before recording, with settings guidance and re-checks on launch and before each session.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- electron, macos, typescript
- Domain
- desktop, operating-systems, security
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100