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. Not only in our opinion is this a severe invasion of customer privacy...

However, according to Apple this practice has been stopped now. Apple does not deny that in the past voice commands indeed used to be processed on external Apple servers, but according to Apple they were never associated with the user's Apple ID (?). We have to trust Apple with this information, because there is no way to confirm it. This nevertheless still meant that voice commands did not stay on your computer, but were transferred to external servers instead to be processed. Finally, in 2021, Apple announced that it intends to send no more audio recordings to remote Apple servers. Instead they are now supposed to be processed locally on the user's device.

Siri makes use of algorithms and machine learning to improve itself. Some data that is used to make Siri 'better', like the music you listen to and your Spotlight searches, is still sent to Apple by default. However, all data that is sent to Apple is supposed to be encrypted and anonymized. Moreover Apple still claims that this data is not associated in any way with your Apple ID. Again we have to trust Apple with this information.

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

# 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 (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):

  • com.apple.siri.embeddedspeech
  • siriactionsd
  • sirittsd
  • 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 did not manage to completely disable Siri 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 porcesses 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. 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. This 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.

A simple solution to this communication problem is to use another intermediate 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 location that will be monitored by our LaunchDaemon. At the same time this location is going to be accessed by our LaunchAgent whenever ~/Library/Assistant/ is modified by Siri, which in turn allows our LaunchDaemon to kill Siri immideately whenever 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 can find 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
  • siriactionsd
  • sirittsd
  • 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 commandline editior, 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 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</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 follows a specific struture. We won't go into detail about it here. Important is that we 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
# 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 commandline editior, 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

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: 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 a user account on MacOS to watch this folder location and a global LaunchDaemon that terminates all processes related to Siri as soon as they are detected by our LaunchAgent.


BE CAREFUL: YOU SHOULD ALWAYS LOOK AT THE CONTENT OF ANY SHELL SCRIPT YOU DOWNLOAD FROM AN UNKNOWN SOURCE BEFORE YOU EXECUTE IT! VERIFY ITS CONTENT FIRST TO MAKE SURE IT IS SAFE TO EXECUTE!

We host our scripts visible 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 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.