<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alexander Burlis</title>
    <description>The latest articles on DEV Community by Alexander Burlis (@alexburlis).</description>
    <link>https://dev.to/alexburlis</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4208338%2F941dd8ef-3704-46c1-8484-6616dccd2e39.png</url>
      <title>DEV Community: Alexander Burlis</title>
      <link>https://dev.to/alexburlis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alexburlis"/>
    <language>en</language>
    <item>
      <title>Local dictation and cloud cleanup on Mac: where your words go</title>
      <dc:creator>Alexander Burlis</dc:creator>
      <pubDate>Mon, 26 Oct 2026 14:57:17 +0000</pubDate>
      <link>https://dev.to/alexburlis/local-dictation-and-cloud-cleanup-on-mac-where-your-words-go-54l9</link>
      <guid>https://dev.to/alexburlis/local-dictation-and-cloud-cleanup-on-mac-where-your-words-go-54l9</guid>
      <description>&lt;p&gt;A Mac dictation app can transcribe audio locally and then send the transcript to a cloud model for cleanup. Check both stages before treating a dictation workflow as local.&lt;/p&gt;

&lt;h2&gt;
  
  
  Speech recognition and cleanup handle different inputs
&lt;/h2&gt;

&lt;p&gt;Speech recognition converts microphone audio into a transcript. Cleanup takes that transcript and edits it: removing fillers, resolving spoken corrections, or turning a rambling sentence into a readable paragraph.&lt;/p&gt;

&lt;p&gt;The two stages can run in different places:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Local speech recognition, cloud cleanup

Microphone → local speech model → transcript
                                      ↓
                              remote rewrite model
                                      ↓
                                edited text → editor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In that workflow, the cleanup service receives text. Text omits the original sound, including your voice and ambient noise, but it can still include any background speech captured in the transcript. It can also contain the same customer names, incident details, and unreleased plans as the recording.&lt;/p&gt;

&lt;p&gt;For a concrete local implementation, &lt;a href="https://github.com/ggml-org/whisper.cpp" rel="noopener noreferrer"&gt;whisper.cpp documents on-device inference and Apple Silicon support&lt;/a&gt;. For a cloud implementation, &lt;a href="https://developers.openai.com/api/docs/guides/speech-to-text" rel="noopener noreferrer"&gt;OpenAI's file-transcription documentation&lt;/a&gt; shows an audio file being sent to its transcription endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Map the whole route
&lt;/h2&gt;

&lt;p&gt;Here, local means the model runs on this Mac, with cloud fallback disabled. The table assumes separate speech recognition and text-only cleanup. History, diagnostics, and the destination app need separate checks.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Speech recognition&lt;/th&gt;
&lt;th&gt;Cleanup&lt;/th&gt;
&lt;th&gt;Processing outside this Mac&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Local&lt;/td&gt;
&lt;td&gt;Off&lt;/td&gt;
&lt;td&gt;None required for speech recognition.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local&lt;/td&gt;
&lt;td&gt;Local&lt;/td&gt;
&lt;td&gt;None required for either stage once models are available.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local&lt;/td&gt;
&lt;td&gt;Cloud&lt;/td&gt;
&lt;td&gt;The cleanup service receives the transcript, instructions, and any supplied context.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud&lt;/td&gt;
&lt;td&gt;Off&lt;/td&gt;
&lt;td&gt;The speech service receives audio and produces a transcript.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud&lt;/td&gt;
&lt;td&gt;Local&lt;/td&gt;
&lt;td&gt;The speech service receives audio and produces a transcript; cleanup can then happen locally.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud&lt;/td&gt;
&lt;td&gt;Cloud&lt;/td&gt;
&lt;td&gt;Audio reaches the speech service; transcript text and any supplied context reach the cleanup service.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Count every recipient. An app maker may relay requests through its servers before they reach a model provider. Providing your own API key does not prove the request goes directly to that provider. A model on another computer on your LAN is also outside this Mac. If a service accepts audio and returns polished text in one call, it has audio access during cleanup too.&lt;/p&gt;

&lt;p&gt;Check fallback behavior too. If a selected local model is unavailable, an app might fail, ask what to do, or use an enabled cloud fallback. Look for a status showing which model actually handled the recording.&lt;/p&gt;

&lt;p&gt;For sensitive work, choose a configuration that visibly stops when local processing is unavailable. An automatic fallback can be convenient when cloud processing is acceptable, provided the setting and the resulting route are clear.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a text-only cleanup request contains
&lt;/h2&gt;

&lt;p&gt;This fictional cleanup request contains a spoken correction and a prohibition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"instruction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Remove fillers and resolve spoken corrections. Preserve prohibitions."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Um move the staging release to Thursday, actually Friday, and don't run the migration on production."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The desired edited version is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Move the staging release to Friday. Do not run the migration on production.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those two details give you specific checks for the cleanup result: keep Friday and preserve the prohibition. Sending the request also discloses the release details to the cleanup service, even though no audio is attached. If the application adds a window title, selected text, or surrounding document content, those fields disclose more than the words you dictated.&lt;/p&gt;

&lt;p&gt;Review each recipient's current retention and training terms separately; the word “cloud” does not establish either policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checks you can make in macOS
&lt;/h2&gt;

&lt;p&gt;For Apple's built-in Dictation, open &lt;strong&gt;System Settings → Keyboard → Dictation&lt;/strong&gt;. With Dictation enabled, read the processing notice. &lt;a href="https://support.apple.com/guide/mac-help/use-dictation-mh40584/mac" rel="noopener noreferrer"&gt;Apple says it identifies whether general-text voice input and transcripts are processed on your device and not sent to Siri servers&lt;/a&gt;. That description excludes dictation into search boxes. Audio sharing is a separate choice under &lt;strong&gt;Privacy &amp;amp; Security → Analytics &amp;amp; Improvements → Improve Siri &amp;amp; Dictation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you use Apple Intelligence for cleanup, it can run on device or use Private Cloud Compute for more complex requests. On supported Macs, &lt;strong&gt;Privacy &amp;amp; Security → Apple Intelligence Report → Export Activity&lt;/strong&gt; produces a JSON report of Private Cloud Compute requests. &lt;a href="https://support.apple.com/guide/mac-help/apple-intelligence-and-privacy-mchlfc0d4779/mac" rel="noopener noreferrer"&gt;Apple documents a 15-minute or seven-day reporting window&lt;/a&gt;. This report covers that Apple service, not every third-party model or network request.&lt;/p&gt;

&lt;p&gt;For third-party dictation tools, review &lt;strong&gt;Privacy &amp;amp; Security → Accessibility&lt;/strong&gt;. &lt;a href="https://support.apple.com/guide/mac-help/allow-accessibility-apps-to-access-your-mac-mh43185/mac" rel="noopener noreferrer"&gt;Apple describes this permission as allowing an app to access and control your Mac&lt;/a&gt;. Check what the app says it reads. If it inserts text through copy and paste, also consider clipboard-history tools and &lt;a href="https://support.apple.com/guide/mac-help/copy-and-paste-between-devices-mchl70368996/mac" rel="noopener noreferrer"&gt;Universal Clipboard&lt;/a&gt;, which can make copied content available on your other Apple devices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check offline behavior with a harmless recording
&lt;/h2&gt;

&lt;p&gt;Use downloaded models and a harmless sentence to check a chosen configuration:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;While online, finish setup and download the local models you intend to use.&lt;/li&gt;
&lt;li&gt;Select local speech recognition. Turn cleanup off for the first check, and disable cloud fallback if the app offers it.&lt;/li&gt;
&lt;li&gt;Open a local, unsynced document. Disconnect Wi-Fi and any other active internet connection.&lt;/li&gt;
&lt;li&gt;Dictate the staging-release sentence from the example. Check that the transcript appears and can be inserted or copied.&lt;/li&gt;
&lt;li&gt;If you want local cleanup, enable its downloaded model and repeat. Check that the final day is Friday and the prohibition on running the migration survives.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If transcription succeeds but cleanup fails offline, inspect the cleanup route and model readiness separately. A sign-in or license check can also create a network dependency; an offline failure alone does not reveal what content would be sent.&lt;/p&gt;

&lt;p&gt;A successful offline run establishes that this configuration can complete that sample without an internet connection. It does not prove that the app never uploads content when connectivity returns.&lt;/p&gt;

&lt;p&gt;For an online check, use another harmless recording and watch the app's own row in &lt;strong&gt;Activity Monitor → Network&lt;/strong&gt; before, during, and after dictation. &lt;a href="https://support.apple.com/guide/activity-monitor/view-network-activity-actmntr1006/mac" rel="noopener noreferrer"&gt;The totals at the bottom cover the whole Mac&lt;/a&gt;. The built-in &lt;code&gt;nettop&lt;/code&gt; command also shows per-process sockets; press &lt;code&gt;e&lt;/code&gt; to expand connections and &lt;code&gt;q&lt;/code&gt; to quit.&lt;/p&gt;

&lt;p&gt;Include the app's helpers and system background transfers in your investigation. &lt;a href="https://developer.apple.com/documentation/foundation/urlsessionconfiguration/background(withidentifier:)" rel="noopener noreferrer"&gt;Background URLSession transfers run in a separate system process&lt;/a&gt;; on macOS, &lt;code&gt;nsurlsessiond&lt;/code&gt; handles them. That daemon can serve multiple apps, so its traffic alone cannot identify which app sent data. A quiet app row does not prove nothing was sent.&lt;/p&gt;

&lt;p&gt;These tools can identify connections and data transfer. They cannot tell you whether a TLS-encrypted request contains audio, text, diagnostics, or a mixture. Traffic volume alone cannot settle that question. Confirm payload contents through documented request schemas or a controlled inspection using synthetic content. Check for deferred uploads after reconnecting as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Follow the text into its destination
&lt;/h2&gt;

&lt;p&gt;Even when speech recognition and cleanup run locally, inserting the result into a synced note, webmail draft, or team chat can send it through that application's services. Local inference controls one part of the journey.&lt;/p&gt;

&lt;p&gt;Dictating into a cloud coding agent is another example. The destination already sends text to its model service; a separate cloud cleanup service can add another recipient.&lt;/p&gt;

&lt;p&gt;Keep these checks separate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inference:&lt;/strong&gt; Which services receive audio, text, or added context?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;History:&lt;/strong&gt; Does the dictation app retain recordings or transcripts, and where?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diagnostics:&lt;/strong&gt; Can reporting include content, or only operational metadata?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Destination:&lt;/strong&gt; Will the receiving app save, sync, or send the inserted text?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For source code and shell commands, review exact names, flags, numbers, and negations after any cleanup. Keep automatic submission disabled while checking a terminal workflow: insertion and execution are separate actions.&lt;/p&gt;

&lt;p&gt;If you build a dictation tool, expose the speech, cleanup, and fallback routes separately. Send only the context a feature needs. With Apple's Speech framework, check the recognizer's &lt;code&gt;supportsOnDeviceRecognition&lt;/code&gt; before requiring local processing with &lt;a href="https://developer.apple.com/documentation/speech/sfspeechrecognitionrequest/requiresondevicerecognition" rel="noopener noreferrer"&gt;&lt;code&gt;requiresOnDeviceRecognition&lt;/code&gt;&lt;/a&gt;. Apple documents that the request honors that requirement only when on-device recognition is supported. If your feature promises local processing and support is unavailable, stop visibly.&lt;/p&gt;

&lt;p&gt;For a local workflow, start with local speech recognition and cleanup off. Enable a downloaded cleanup model when you need its edits. Check fallback and destination sync before using sensitive content.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: This article was generated by an AI assistant. The diagram, payload, and editing example are illustrative; they do not report a benchmark or a hands-on test.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
