# ScreenKite macOS (app target)

Capture-first product: recording, capture, permissions, device/audio routing, presenter tools,
screenshots, Sparkle updates, status-bar behavior. The editor itself lives in
`../packages/CoreVideoEditor`; product direction lives in `VISION.md` (this directory).

## Read first

- Product direction & strategic bets: `VISION.md`
- Shared thesis + voice: `../../../VISION.md`
- Recorder architecture (diagrams): `../docs/architecture-screenkite-recorder.md`
- macOS workflow & validation: `../../../.agents/skills/screenkite-macos/SKILL.md`

## Subsystem map

- Recording engine (capture, inputs, drift correction, writers): `RecordingEngine/`
- Recording Hub UI (source/device bar), status bar, onboarding: `Main/`
- In-recording control pill + processing HUD: `Recording/`
- Teleprompter (incl. voice-follow): `Teleprompter/`
- Camera mirror/recorder: `Camera/`
- Screenshots (capture, scroll capture, OCR, beautify, pin, history): `Screenshot/`,
  editor WebView host in `ScreenshotEditor/`
- Crash/interrupt recovery for unfinished recordings: `RecordingRecovery/`
- Auth (OAuth PKCE against screenkite.com) + licensing (dual LemonSqueezy/in-house, dormant while
  the app is free): `Supports/Auth/`, `Supports/Licensing/`
- Permissions: `Supports/PermissionManager.swift`

## Invariants

- Recording and finalization are regression-sensitive surfaces: run the review loop
  (`../../../.agents/skills/screenkite-review/SKILL.md`) on non-trivial changes.
- Editor behavior differences vs PilotCut are expressed via `ProjectEditorConfiguration`
  (`.screenkite`), never by forking CoreVideoEditor.
- Export branding (watermark/outro) is gated centrally in CoreVideoEditor
  (`Sources/Licensing/ExportBrandingGate.swift`) and is dark behind remote config; do not add
  ad-hoc gating in the app target.

## Skills

- SwiftUI overlays & hosting: `../../../.agents/skills/screenkite-mac-swiftui/SKILL.md`
- Telemetry/analytics/logging: `../../../.agents/skills/screenkite-macos-telemetry/SKILL.md`
- MCP/CLI agentic editing: `../../../.agents/skills/screenkite-mcp-agent/SKILL.md`
