Siri is Apple’s voice control system. It uses voice queries and a language user interface to answer your questions, make recommendations, and perform actions on your behalf. In order to do this, Siri sends requests to a set of internet services.
In the past, Apple has been caught sending voice assistant recordings to contractors, who listened to snippets of voice requests and conversations, supposedly only in order to refine Siri’s voice recognition ability. Apple tried to keep this practice secret, but the information was leaked to the public. This practice is a severe invasion of customer privacy.
However, according to Apple, this has stopped now. Apple does not deny anymore that in the past voice commands used to be processed on external Apple servers, but according to Apple this data was never associated with the user’s Apple ID. We have to trust Apple tells the truth, because we have no access to Apple’s servers and databases and because its software is closed source. There is no way to confirm this statement. For sure we know that until recently voice commands did not stay on your computer, but were transferred to external servers to be processed. Finally, in 2021, Apple announced that it will send no more audio recordings to remote Apple servers. Instead Apple claims, voice commands are now to be processed locally on the user’s device.
Siri makes use of algorithms and machine learning to improve itself. Despite Apple’s claims to send no more audio recordings from your device to its servers, some data that is used to make Siri ‘better’, like the music you listen to and your Spotlight searches, nevertheless still is sent to Apple by default to be analyzed. However, all data that is sent to Apple is encrypted and anonymized (says Apple). Moreover Apple claims that your data is not associated in any way with your Apple ID. Again we have to trust Apple with this information. Apple software is closed source and cannot be reviewed by the public.
It should be easy to disable Siri in MacOS. The most accessible and common way is to open your System Settings -> Siri & Spotlight and untick Ask Siri. Then click on Siri Suggestions & Privacy and make sure you disable every option that allows Siri to show suggestions and every option that allows Siri to learn from any app that is available in the list. When you are Done scroll down to the Spotlight options and make sure Siri Suggestions are unticked as well.
Alternatively you could also run the required commands in your Terminal.app (found with Spotlight: press ⌘ and [SPACE], then type Terminal, or find it in your Applications -> Utilities Folder).
To opt out from Siri data collection, execute this command:
# Opt-out from Siri data collection
defaults write com.apple.assistant.support 'Siri Data Sharing Opt-In Status' -int 2
To disable Ask Siri, execute:
# Disable 'Ask Siri'
defaults write com.apple.assistant.support 'Assistant Enabled' -bool false
Disable Siri voice feedback:
# Disable Siri voice feedback
defaults write com.apple.assistant.backedup 'Use device speaker for TTS' -int 3
Disable Do you want to enable Siri? pop-up:
# Disable 'Do you want to enable Siri?' pop-up
defaults write com.apple.SetupAssistant 'DidSeeSiriSetup' -bool True
Hide Siri from menu bar:
# Hide Siri from menu bar
defaults write com.apple.Siri 'StatusMenuVisible' -bool false defaults write com.apple.Siri 'UserHasDeclinedEnable' -bool true
Disable Siri services (Siri and assistantd – which is a Siri helper process):
# Disable Siri services (Siri and assistantd)
launchctl disable "user/$UID/com.apple.assistantd" launchctl disable "gui/$UID/com.apple.assistantd" sudo launchctl disable 'system/com.apple.assistantd' launchctl disable "user/$UID/com.apple.Siri.agent" launchctl disable "gui/$UID/com.apple.Siri.agent" sudo launchctl disable 'system/com.apple.Siri.agent'
In theory this should be enough to disable Siri on your computer. However if you open your Activity Monitor.app after you disabled Siri (press ⌘ and [SPACE], then type Activity Monitor) and you search for siri and assitantd, it will still show you that some or all of the following siri processes are running, even after you reboot your computer (tested on MacOS Monterey 12.5.1 and MacOS Ventura 13.0.1):
The reason is that Apple does not allow you to disable Siri permanently unless you disable your Mac’s System Integrity Protection (SIP) as well. Since MacOS BigSur Siri is baked into its core operating system – which is protected by SIP. In other words: in oder to disable Siri completely, you first have to disable SIP, then you can disable Siri. But you also have to keep SIP disabled, which will make your computer less secure and more vulnerable to external attacks. As soon as you re-enable SIP, Siri will be reactivated too. We have tried…
We want the benefits of MacOS’s System Integrity Protection but we don’t want Siri. We tried everything and we did not manage to disable Siri and all related processes and keep SIP enabled at the same time. This is frustrating, which is why we came up with a workaround. The idea is to kill Siri and any process that is related to Siri as soon as it is re-spawned by the system.
Follow this step-by-step guide if you want to learn how to setup a LaunchAgent and a LaunchDaemon as a Siri Killswitch on MacOS. If you prefer an automated fast and easy way to set it up, use our scripted solution instead: Kill Siri: Interactive Script
We noticed that whenever Siri or assistantd become active, they create and modify files in this location: ~/Library/Assistant/
~/Library/Assistant/ is a local folder that will be created by the system for every new user account. This means that every modification in this folder can be used as a reliable indicator and trigger to search for Siri’s helper processes and kill them immideately as soon as they become ative.
To monitor this folder location we have to set up a LaunchAgent that runs with local user privileges. However, since there are Siri processes that are spawned with superuser privileges, we will need to set up a global LaunchDaemon too in order to terminate them. This separation into a LaunchAgent and a LaunchDaemon to create a killswitch is not only necessary because some Siri processes run with superuser privileges and thus need superuser privileges to be terminated, but also because we require specific user privileges to monitor and access local folders that are owned by a specific user account. In MacOS, a global LaunchDaemon is not permitted to monitor and change files and folders that belong to a specific user account. Furthermore, our LaunchAgent also has the job to delete all files and folders that are created by Siri in ~/Library/Assistant/, which in turn forces Siri to recreate them every time Siri becomes active. It makes our killswitch much more reliable. This is reason why we need both, a LaunchAgent that can access local folders and a LaunchDaemon that can terminate global processes.
The challenge is: whenever our LaunchAgent registers that Siri becomes active, it needs to somehow notify our global LaunchDaemon of this activity, because otherwise our LaunchDaemon cannot know that Siri has been re-spawned by the system in the context of a apecific user account that it cannot monitor.
A simple solution to this communication problem is to use another intermediate file location in MacOS that can be accessed by every user and thus also by LaunchAgents and LaunchDaemons alike. The shared folder /Users/Shared/ is such a location.
We are going to use /Users/Shared/ to setup a shared trigger that will be monitored by our LaunchDaemon. This trigger is going to be activated by our LaunchAgent whenever ~/Library/Assistant/ is modified by Siri, which in consequence tells our LaunchDaemon to kill Siri immideately as soon as Siri is re-spawned by the system.
We first need to setup a shared trigger location:
Next we configure folder ownership and permissions:
sudo chown $(stat -f '%Su' /dev/console):wheel /Users/Shared/Enhancements
sudo chown $(stat -f '%Su' /dev/console):staff /Users/Shared/Enhancements/trigger
sudo chmod 775 /Users/Shared/Enhancements/trigger
Quick Summary: The global LaunchDaemon montitors the shared trigger location. As soon as this location is modified by the LaunchAgent, the LaunchDaemon searches for a predefined set of Siri Processes and terminates them if it finds them.
In oder to terminate a process via the commandline, we first have to know which process we are looking for. We already identified the following processes when we searched Siri and assistantd with the Activity Monitor after we tried to disable Siri in our System Settings:
For example this command checks if assistantd is running and attempts to terminate it, if it can find it:
sh -c "if pgrep assistantd; then kill -9 $(pgrep assistantd); fi;"
Our LaunchDaemon needs to execute this command for each process we identified previously. To create a LauchDaemon, navigate in your Terminal.app to the folder location where all global LaunchDaemons are stored:
Open a command-line editor, i.e. nano, to create the LaunchDaemon:
sudo nano info.term7.killall.siri.plist
Copy and paste the following lines:
Label info.term7.killall.siri ProgramArguments /bin/sh -c if pgrep siriinferenced; then kill -9 $(pgrep siriinferenced); fi; if pgrep siriactionsd; then kill -9 $(pgrep siriactionsd); fi; if pgrep siriknowledged; then kill -9 $(pgrep siriknowledged); fi; if pgrep sirittsd; then kill -9 $(pgrep sirittsd); fi; if pgrep SiriTTSSynthesizerAU; then kill -9 $(pgrep SiriTTSSynthesizerAU); fi; if pgrep assistantd; then kill -9 $(pgrep assistantd); fi; if pgrep com.apple.siri.embeddedspeech; then kill -9 $(pgrep com.apple.siri.embeddedspeech); fi WatchPaths /Users/Shared/Enhancements/trigger
Press [control] + X and then Y + [ENTER] to save the file and close the editor.
LaunchDaemons and LaunchAgents in MacOS follow a specific file struture. In this post we won’t go into detail about it (maybe in another post). In this case it is important for you to know that we have to specify a Label (the name of our LaunchDaemon), ProgramArguments (the commands that need to be executed) and WatchPaths (the location that needs to be monitored for changes).
Finally, setup the required ownership and permissions:
sudo chown root:wheel /Library/LaunchDaemons/info.term7.killall.siri
sudo chmod 644 /Library/LaunchDaemons/info.term7.killall.siri.plist
Quick Summary: The LaunchAgent montitors ~/Library/Assistant/. As soon as Siri and related processes modifiy this location, our LaunchAgent instructs our global LaunchDaemon via our shared trigger location /Users/Shared/Enhacements/trigger to kill Siri before it proceeds to delete all Siri content in ~/Library/Assistant/.
These commands modify and delete a file in /Users/Shared/Enhacements/trigger:
# Modify trigger
# Delete trigger
And this command deletes the log file that is always created when assistantd starts:
rm -f -- ~/Library/Assistant/assistantdDidLaunch
We identified several files and folders that are created by Siri processes and we need to instruct our LaunchAgent to delete all of them:
To create a LauchAgent, navigate in your Terminal.app to the folder location where all LaunchAgents for all users are stored:
Open a command-line editor, i.e. nano, to create the LaunchAgent:
sudo nano info.term7.killall.siri.helper.plist
Copy and paste the following lines:
Label info.term7.killall.siri.helperProgramArguments /bin/sh -c touch /Users/Shared/Enhancements/trigger/.trigger; rm /Users/Shared/Enhancements/trigger/.trigger; rm -f -- ~/Library/Assistant/SiriAnalytics.db; rm -f -- ~/Library/Assistant/SiriAnalytics.db-shm; rm -f -- ~/Library/Assistant/SiriAnalytics.db-wal; rm -f -- ~/Library/Assistant/assistantdDidLaunch; rm -f -- ~/Library/Assistant/session_did_finish_timestamp; if [ -d ~/Library/Assistant/SiriVocabulary ]; then rm -rf ~/Library/Assistant/SiriVocabulary; fi; if [ -d ~/Library/Assistant/CustomVocabulary ]; then rm -rf ~/Library/Assistant/CustomVocabulary; fi; if [ -d ~/Library/Assistant/SiriReferenceResolution ]; then rm -rf ~/Library/Assistant/SiriReferenceResolution; fi WatchPaths ~/Library/Assistant
Press [control] + X and then Y + [ENTER] to save the file and close the editor.
Again we specify a Label (the name of our LaunchAgent), ProgramArguments (the commands that need to be executed) and WatchPaths (the location that needs to be monitored for changes).
Setup ownership and permissions:
sudo chown root:wheel /Library/LaunchAgents/info.term7.killall.siri.helper.plist
sudo chmod 644 /Library/LaunchAgents/info.term7.killall.siri.helper.plist
Finally, to activate the killswitch, start the LaunchDaemon and the LaunchAgent with the following commands:
# Start LaunchAgent
launchctl load /Library/LaunchAgents/info.term7.killall.siri.helper.plist
# Start LaunchDaemon
sudo launchctl load /Library/LaunchDaemons/info.term7.killall.siri
To test wether or not the killswitch works, modify ~/Library/Assistant/ with this command:
# Trigger once
touch /Users/$(stat -f '%Su' /dev/console)/Library/Assistant/.tmp
Now open your Activity Monitor.app and search for siri and assistantd. You should find no running processes that belong to Siri.
rm /Users/$(stat -f '%Su' /dev/console)/Library/Assistant/.tmp
Congratulations! Your Siri Killswitch is now up and running. Every time you restart your computer it will run automatically.
1) Unload the LaunchAgent and the LaunchDemon:
# Unload LaunchAgent
sudo -u $(stat -f '%Su' /dev/console) launchctl unload /Library/LaunchAgents/info.term7.killall.siri.helper.plist
# Unload LaunchDemon
sudo -u $(stat -f '%Su' /dev/console) launchctl unload /Library/LaunchDaemons/info.term7.killall.siri
2) Delete the LaunchAgent and the LaunchDemon:
# Delete LaunchAgent
sudo rm /Library/LaunchAgents/info.term7.killall.siri.helper.plist
# Delete LaunchDemon
sudo rm /Library/LaunchDaemons/info.term7.killall.siri
3) Delete the Trigger Location:
# Delete Trigger Location
sudo -u $(stat -f '%Su' /dev/console) rm -rf /Users/Shared/Enhancements/trigger
Your Siri Killswitch has now been purged from your system.
Both our interactive script and our speedy install script set up a local LaunchAgent that starts whenever a user logs into an account on MacOS. It watches a folder location that is modified by Siri processes. Our script also configures a global LaunchDaemon that terminates all processes related to Siri as soon as they are detected by our LaunchAgent. We also provide a simple uninstall script.
BE CAREFUL: YOU SHOULD ALWAYS LOOK THROUGH THE CONTENT OF ANY SHELL SCRIPT YOU DOWNLOAD FROM AN UNKNOWN SOURCE BEFORE YOU EXECUTE IT! MAKE SURE IT IS SAFE TO EXECUTE!
WE HOST OUR SCRIPTS FOR EVERYONE TO SEE ON OUR GITHUB PAGE.
To run our script, you first have to download it. Open the Terminal.app (found with Spotlight: press ⌘ and [SPACE], then type Terminal, or find it in your Applications -> Utilities Folder). In your Terminal, use this command to navigate to your Downloads Folder:
Download the interactive script:
# Interactive Script
curl -O https://raw.githubusercontent.com/term7/MacOS-Privacy-and-Security-Enhancements/main/02_Kill-Siri/script/kill-siri.sh
Download the speedy install script:
# Speedy Install Script
curl -O https://raw.githubusercontent.com/term7/MacOS-Privacy-and-Security-Enhancements/main/02_Kill-Siri/script/SPEEDY-INSTALL_kill-siri.sh
If you ever want to uninstall the Siri killswitch, download our uninstall script:
# Uninstall Script
curl -O https://raw.githubusercontent.com/term7/MacOS-Privacy-and-Security-Enhancements/main/02_Kill-Siri/script/UNINSTALL_kill-siri.sh
Give the respective file execute permissions:
chmod +x *kill-siri.sh
Execute the respective script:
If asked, enter your administrator password and hit [ENTER] and follow the instructions. Your password won’t be shown by default.