Kill Siri

Have you ever tried to disable Siri? If you did, you probably noticed that even if you switch off Siri in your System Settings, there still are Siri Processes running in the background. We want to show you how you can disable them!

Kill Siri


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.

Here you can find Apple's Privacy Policy and Terms of Service.

Disable Siri

System Settings

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 collectiondefaults 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 feedbackdefaults 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-updefaults write com.apple.SetupAssistant 'DidSeeSiriSetup' -bool True

Hide Siri from menu bar:

# Hide Siri from menu bardefaults 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 (depending on your version of MacOS) are running, even after you reboot your computer (tested on MacOS Monterey 12.5.1, MacOS Ventura 13.0.1 and MacOS Sonoma 14.1.1):

  • com.apple.siri.embeddedspeech
  • com.apple.SiriTTSService.TrialProxy
  • siriactionsd
  • sirittsd
  • SiriAUSP
  • SiriTTSSynthesizerAU
  • siriknowledged
  • siriinferenced
  • assistantd

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...

Kill Siri: Manual Setup

Siri Killswitch with SIP enabled

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

CONCEPT:


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.

SETUP SHARED TRIGGER LOCATION:


We first need to setup a shared trigger location:

mkdir /Users/Shared/Enhancements
mkdir /Users/Shared/Enhancements/trigger

Next we configure folder ownership and permissions:

# Ownershipsudo chown $(stat -f '%Su' /dev/console):wheel /Users/Shared/Enhancements
# Ownershipsudo chown $(stat -f '%Su' /dev/console):staff /Users/Shared/Enhancements/trigger
# Permissionssudo chmod 775 /Users/Shared/Enhancements/trigger

CREATE LAUNCHDAEMON:


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:

  • com.apple.siri.embeddedspeech
  • com.apple.SiriTTSService.TrialProxy
  • siriactionsd
  • sirittsd
  • SiriAUSP
  • SiriTTSSynthesizerAU
  • siriknowledged
  • siriinferenced
  • assistantd

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:

cd /Library/LauchDaemons

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:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>info.term7.killall.siri</string>
	<key>ProgramArguments</key>
	<array>
		<string>/bin/sh</string>
		<string>-c</string>
		<string>if pgrep SiriAUSP; then kill -9 $(pgrep SiriAUSP); fi; 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; if pgrep com.apple.SiriTTSService.TrialProxy; then kill -9 $(pgrep com.apple.SiriTTSService.TrialProxy); fi</string>
	</array>
	<key>WatchPaths</key>
	<array>
		<string>/Users/Shared/Enhancements/trigger</string>
	</array>
</dict>
</plist>

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:

# Ownershipsudo chown root:wheel /Library/LaunchDaemons/info.term7.killall.siri.plist
# Permissionssudo chmod 644 /Library/LaunchDaemons/info.term7.killall.siri.plist

CREATE LAUNCHAGENT:


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 triggertouch /Users/Shared/Enhancements/trigger/.trigger
# Delete triggerrm /Users/Shared/Enhancements/trigger/.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:

  • ~/Library/Assistant/SiriAnalytics.db
  • ~/Library/Assistant/assistantdDidLaunch
  • ~/Library/Assistant/session_did_finish_timestamp
  • ~/Library/Assistant/SiriVocabulary
  • ~/Library/Assistant/CustomVocabulary
  • ~/Library/Assistant/SiriReferenceResolution

To create a LauchAgent, navigate in your Terminal.app to the folder location where all LaunchAgents for all users are stored:

cd /Library/LaunchAgents

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:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>info.term7.killall.siri.helper</string>
	</key>ProgramArguments</key>
	</array>
		</string>/bin/sh</string>
		</string>-c</string>
		</string>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</string>
	</array>
	</key>WatchPaths</key>
	</array>
		</string>~/Library/Assistant</string>
	</array>
</dict>
</plist>

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:

# Ownershipsudo chown root:wheel /Library/LaunchAgents/info.term7.killall.siri.helper.plist
# Permissionssudo 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 LaunchAgentlaunchctl load /Library/LaunchAgents/info.term7.killall.siri.helper.plist
# Start LaunchDaemonsudo launchctl load /Library/LaunchDaemons/info.term7.killall.siri.plist

To test wether or not the killswitch works, modify ~/Library/Assistant/ with this command:

# Trigger oncetouch /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.

Cleanup:

# Cleanuprm /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.

Kill Siri: Uninstall Killswitch

the manual way...

1) Unload the LaunchAgent and the LaunchDemon:

# Unload LaunchAgentsudo -u $(stat -f '%Su' /dev/console) launchctl unload /Library/LaunchAgents/info.term7.killall.siri.helper.plist
# Unload LaunchDemonsudo -u $(stat -f '%Su' /dev/console) launchctl unload /Library/LaunchDaemons/info.term7.killall.siri.plist

2) Delete the LaunchAgent and the LaunchDemon:

# Delete LaunchAgentsudo rm /Library/LaunchAgents/info.term7.killall.siri.helper.plist
# Delete LaunchDemonsudo rm /Library/LaunchDaemons/info.term7.killall.siri.plist

3) Delete the Trigger Location:

# Delete Trigger Locationsudo -u $(stat -f '%Su' /dev/console) rm -rf /Users/Shared/Enhancements/trigger

Your Siri Killswitch has now been purged from your system.

Kill Siri: Interactive Script

Siri Killswitch with SIP enabled

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:

cd ~/Downloads

Download the interactive script:

# Interactive Scriptcurl -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 Scriptcurl -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 Scriptcurl -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:

./kill-siri.sh
./SPEEDY-INSTALL_kill-siri.sh
./UNINSTALL_kill-siri.sh

If asked, enter your administrator password and hit [ENTER] and follow the instructions. Your password won't be shown by default.

PREVIEW:



MacOS-Privacy-and-Security-Enhancements/02_Kill-Siri at main · term7/MacOS-Privacy-and-Security-Enhancements
Executables to enhance MacOS Privacy and Security. Contribute to term7/MacOS-Privacy-and-Security-Enhancements development by creating an account on GitHub.