{"slug": "scripta-3-4-7-schedule-local-meeting-recordings-without-sending-anything-to-the", "title": "Scripta 3.4.7: schedule local meeting recordings without sending anything to the cloud", "summary": "A developer released Scripta v3.4.7, a macOS meeting transcription app that adds local scheduled recordings so sessions can auto-start without sending anything to the cloud. The update introduces a ScheduleCoordinator that ticks roughly once per second, persists schedules to a single JSON file, and reuses the existing whisper.cpp and SFSpeechRecognizer pipeline, with intentional limits such as no overlapping schedules and no background daemon recording when the app is closed.", "body_md": "*Follow-up to [Building a 100% local meeting transcription app for macOS](https://dev.to/thehwang/building-a-100-local-meeting-transcription-app-for-macos-with-whispercpp-and-screencapturekit) — Scripta already records dual-channel audio and summarizes with a local LLM. v3.4.7 adds something I kept forgetting to do myself: **hit Record before the meeting starts**.*\n\nScripta works great when I remember to open it and tap **Start Recording**. I do not always remember.\n\nRecurring standups, interviews, and “just a quick sync” calls all have a start time on the calendar — but my muscle memory does not. Cloud assistants solve this by running in someone else’s datacenter. Scripta’s whole pitch is **nothing leaves the Mac**, so “schedule a bot in the cloud” was never an option.\n\nWhat I wanted instead:\n\n`2026-09-25_16-50-00`)\nThat shipped in **[Scripta v3.4.7](https://github.com/thehwang/Scripta/releases/tag/v3.4.7)**.\n\nOpen **Scheduled Recordings** from the toolbar calendar icon (or the menu bar):\n\nCreate a meeting — title, window, language, optional notification if the app is not open at start time:\n\nUpcoming items show status (**Pending**, **Recording now**, **Waiting to start**, etc.) with **Edit**, **Cancel**, or **Stop recording** when relevant:\n\nWhen a scheduled session finishes, the export folder’s `session.json` includes a **title** and optional `scheduledRecordingId`, so **Meeting History** is searchable by name.\n\nThese are intentional — not missing features for v3.5:\n\n| Rule | Why | \n|---|---|\n| **No overlapping schedules** | Saves fail validation if windows intersect | \n| **No auto-summary after scheduled stop** | Manual recordings still offer the summary sheet when Ollama is ready; scheduled runs set `suppressAutoSummary` so you are not interrupted | \n| **No takeover without consent** | If you are already recording at start time, Scripta asks whether to stop the current session and start the scheduled one | \n| **App must be running for auto-capture** | Phase 1 is in-process scheduling only — no `launchd` daemon silently recording in the background | \n| **If the app is closed at start time** | A **local notification** nudges you to open Scripta; it does not pretend recording happened | \n\nCalendar import, multi-device sync, and “record with zero UI process” are explicitly **later phases**.\n\nPersistence is a single JSON file:\n\n`~/Library/Application Support/Scripta/schedules.json`\n\nA **`ScheduleCoordinator`** ticks about once per second while the app runs:\n\n`startRecording()` if permissions are already granted`stopRecording()` for that schedule’s session\nBefore auto-start, **`ScreenRecordingAccess`** checks mic, speech, and ScreenCaptureKit — scheduled paths avoid hammering the system permission dialog every second if you forgot to grant **Screen Recording**.\n\nRecording still uses the same pipeline as manual mode: **whisper.cpp** on the mic, **SFSpeechRecognizer** on system audio via **ScreenCaptureKit** ([architecture write-up](https://dev.to/thehwang/building-a-100-local-meeting-transcription-app-for-macos-with-whispercpp-and-screencapturekit)).\n\nOptional **Awake** (bottom bar, default on): while recording or finishing transcription, Scripta holds an `NSProcessInfo` activity to prevent **idle** system and display sleep — not a guarantee against lid-close or manual sleep, but enough for long calls at your desk.\n\nThe scheduler did not create new TCC categories — it surfaced the same ones as manual record:\n\n**Run Permissions Setup once** before the meeting window. If auto-start fails, the list shows **Waiting to start** with **Retry start** after you fix settings and return to the app.\n\nIf you develop from source, install to **`/Applications/Scripta.app`** (` scripts/install-local.sh`) so TCC matches what users run in production. `swift run` binaries are a different story.\n\n`@Published` language on a background thread`MeetingRecorder` actually enters `.recording`` ContentView` lifecycle modifiers into smaller views fixed macOS 15 CI.\n**Install** (macOS 14+, Apple Silicon or Intel):\n\n```\ncurl -fsSL https://raw.githubusercontent.com/thehwang/Scripta/main/scripts/install.sh | bash\n```\n\n**Repo**: [github.com/thehwang/Scripta](https://github.com/thehwang/Scripta)\n\nAfter install: complete **Permissions Setup**, open **Scheduled Recordings**, add a meeting a few minutes ahead, leave Scripta open, and watch it start on its own.\n\nIf this fits your workflow, a GitHub star helps others find it. Issues and PRs welcome — especially around calendar import and safer wake-from-sleep behavior.\n\n*Scripta is MIT-licensed. Scheduled recording is local-only: your schedules live in `schedules.json` on disk, not on our servers — because there are no servers.*", "url": "https://wpnews.pro/news/scripta-3-4-7-schedule-local-meeting-recordings-without-sending-anything-to-the", "canonical_source": "https://dev.to/thehwang/scripta-347-schedule-local-meeting-recordings-without-sending-anything-to-the-cloud-13od", "published_at": "2026-09-25 21:03:32+00:00", "updated_at": "2026-09-25 21:30:17.372554+00:00", "lang": "en", "topics": ["ai-tools", "natural-language-processing", "developer-tools"], "entities": ["Scripta", "whisper.cpp", "SFSpeechRecognizer", "ScreenCaptureKit", "Ollama", "macOS", "ScheduleCoordinator", "ScreenRecordingAccess"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/scripta-3-4-7-schedule-local-meeting-recordings-without-sending-anything-to-the", "markdown": "https://wpnews.pro/news/scripta-3-4-7-schedule-local-meeting-recordings-without-sending-anything-to-the.md", "text": "https://wpnews.pro/news/scripta-3-4-7-schedule-local-meeting-recordings-without-sending-anything-to-the.txt", "jsonld": "https://wpnews.pro/news/scripta-3-4-7-schedule-local-meeting-recordings-without-sending-anything-to-the.jsonld"}}