4evy/pared

Remove unwanted Apple Intelligence models without disabling SIP. CLI, nix-darwin, and Home Manager support.

Swift

39

4 commits

updated Oct 1, 2026

See the code

See what people are saying

SourceMessageScoreDate

So this is just a wrapper around another project https://github.com/4evy/pared

on Turn off Apple Intelligence on macOS 27 and get its disk space back

0

Oct 5, 2026

README

pared

Remove Apple Intelligence models without disabling SIP

macOS 27 or newer SIP stays enabled MIT license

Install · Usage · Compare · Nix documentation

Pared turns off selected Apple Intelligence features and asks Apple's asset service to remove their downloaded models. System Integrity Protection (SIP) stays enabled. Use the CLI for local settings, or manage a policy with nix-darwin or Home Manager.

Removing models and preventing their return are separate steps: cleanup removes existing models, and an installed configuration profile blocks future downloads.

Install

Homebrew

Requires macOS 27 and Xcode 27 or newer.

brew tap 4evy/pared https://github.com/4evy/pared.git
brew install 4evy/pared/pared

Nix

On Apple silicon, with Nix flakes enabled:

nix run github:4evy/pared -- status
nix profile install github:4evy/pared

To build a local checkout, run nix build. The executable is ./result/bin/pared.

Use

Start by checking the feature names and current policy:

pared features
pared status

A new policy defaults to disabled for every feature. The CLI stores it in ~/Library/Application Support/pared/policy.json. status reports both the policy you requested and the preferences it can read; the policy alone does not prove that macOS enforces those settings.

Starting from a new policy, this example enables Writing Tools and leaves all other features disabled:

pared enable writingTools
pared profile open

Finish installing the generated profile in System Settings. Until you replace an existing profile, its settings remain enforced. enable, disable, and reset save the new policy even when the installed profile overrides it. Enabling a feature permits its use; it does not download its models.

Once the profile is installed, preview and run cleanup:

pared models cleanup --dry-run
pared models cleanup

Cleanup selects a model only when all of its consumers listed in Pared's catalog are disabled. A shared model stays available if any known consumer is enabled or unmanaged. enable and disable do not delete models themselves.

To stop managing a feature, remove its local preferences and replace the profile:

pared reset inlinePredictions
pared profile open

reset removes preference overrides; it does not restore values saved before Pared ran. Apple supplies the defaults where no other policy applies.

Download models again

Enable the feature and install the replacement profile before requesting its models. For a feature with a download mapping in the catalog, such as Genmoji:

pared enable genmoji
pared profile open
# Finish installing the profile in System Settings before continuing
pared models download genmoji
pared models status genmoji

A successful download request means Apple's service accepted the subscription. The download continues in the background. models status reports a snapshot and local asset directories, not live progress or reclaimed disk space. For features without a download mapping, enable them in their Apple app.

Run pared --help for all commands. Use --policy FILE to read an existing policy at another path; this matters when inspecting settings generated by Nix.

nix-darwin / Home Manager

Add inputs.pared.url = "github:4evy/pared"; to your flake. Choose one of the modules below.

nix-darwin

Pass inputs through specialArgs, then add this to your Darwin config:

{ inputs, ... }:
{
  imports = [ inputs.pared.darwinModules.default ];

  programs.pared = {
    enable = true;
    defaultState = false;
    features = {
      writingTools = true;
      notificationSummaries = false;
      spatialPhotos = null;
    };
  };
}

Home Manager

Pass inputs through extraSpecialArgs, then add this to your home config:

{ inputs, ... }:
{
  imports = [ inputs.pared.homeManagerModules.default ];

  programs.pared = {
    enable = true;
    defaultState = false;
    features = {
      writingTools = true;
      notificationSummaries = false;
      spatialPhotos = null;
    };
  };
}

In this example, Writing Tools is enabled, Spatial Photos is unmanaged, and all other features are disabled by defaultState = false. true enables a feature, false disables it, and null omits it from generated settings. Changing a Nix option to null does not remove preferences written earlier.

Rebuild your configuration. For nix-darwin's user preferences, configure system.primaryUser. Then install disable-apple-intelligence.mobileconfig from /etc/pared (nix-darwin) or $XDG_CONFIG_HOME/pared (Home Manager, normally ~/.config/pared) through System Settings.

The same directory contains policy.json and declarations.json. CLI commands use their own policy path unless you pass --policy. For example, preview cleanup using the nix-darwin policy with:

pared models cleanup --policy /etc/pared/policy.json --dry-run

Change Nix-managed settings in your Nix configuration and rebuild; CLI edits to a policy in /nix/store are rejected. Deploy declarations.json through MDM (mobile device management) if you use it; it is not an installable profile.

Both modules remove models for disabled features during activation by default. They record the last successfully cleaned policy and skip cleanup when it is unchanged. A policy change triggers cleanup again; failures retry on the next activation. Set programs.pared.cleanupOnActivation = false; to opt out. Home Manager respects activation dry runs and keeps its cleanup record under $XDG_STATE_HOME/pared; nix-darwin uses /var/db/pared.

Cleanup does not install the profile. Install it to block future model downloads.

How it works

Pared uses a shared feature catalog to connect each feature to its preferences, management restrictions, and model asset sets. An asset set is a group of models managed by Apple's asset service. The CLI and Nix modules use this catalog to generate the same policy settings.

Under the hood

Preventing downloads. For each asset type whose known consumers are all disabled, the profile sets DownloadServerBaseURLOverride-<assetType> in com.apple.MobileAsset to https://127.0.0.1:9/pared-blocked/. mobileassetd reads these settings from /Library/Managed Preferences/com.apple.MobileAsset.plist; ordinary system defaults are denied by its sandbox. This redirects requests for the selected asset types to a loopback URL. Catalog checks and local retries can continue even while payload downloads are blocked.

The XPC connection. Pared loads UnifiedAssetFramework with dlopen and connects to com.apple.siri.uaf.subscription.service using NSXPCConnection. It calls operationWithConfig:completion: through Apple's UAFXPCProxyServiceInterface.defaultInterface, which supplies the wire signature and allowed object classes. The Objective-C bridge declares the oneway void operation and typed configuration getters; Swift does not invoke these selectors through perform. Runtime shape checks reject unknown asset metadata instead of treating it as an empty result.

Deleting models. Pared groups features by asset set and selects a set only when every known consumer is disabled in your policy. It reads each set's autoAssetType from UAFConfigurationManager and checks it against the catalog, then removes matching org.pared download subscriptions and sends a reset request like this:

{
  "Operation": "ResetAssetSets",
  "AssetSets": ["com.apple.modelcatalog"]
}

AssetSets is always explicit: omitting it means every asset set to the server. Apple's daemon performs the reset with the entitlements needed to remove protected assets, so SIP stays on. A successful reply confirms that the reset request returned without an error; check deletion logs and free space to assess the result.

Downloading again. Enable the feature and install the replacement profile before requesting a download. The replacement omits blocks for enabled or unmanaged consumers. Resetting a CLI preference alone does not replace an installed profile. Removing the profile removes its managed download blocks.

Pared resolves usage aliases and checks explicit usage names against Apple's configuration, then builds UAFAssetSetSubscription objects with initWithName:assetSets:usageAliases:. It sends Unsubscribe followed by Subscribe to refresh the selected subscriptions, since reset removes assets but can leave their subscription records behind. Apple's service then handles the download in the background.

Similar projects

Other approaches to removing Apple Intelligence models:

Reference

apple-intelligence
cli
home-manager
macos
nix
nix-darwin
swift

4evy/pared

Remove unwanted Apple Intelligence models without disabling SIP. CLI, nix-darwin, and Home Manager support.

Swift

39

4 commits

updated Oct 1, 2026

See the code

See what people are saying

SourceMessageScoreDate

So this is just a wrapper around another project https://github.com/4evy/pared

on Turn off Apple Intelligence on macOS 27 and get its disk space back

0

Oct 5, 2026

README

pared

Remove Apple Intelligence models without disabling SIP

macOS 27 or newer SIP stays enabled MIT license

Install · Usage · Compare · Nix documentation

Pared turns off selected Apple Intelligence features and asks Apple's asset service to remove their downloaded models. System Integrity Protection (SIP) stays enabled. Use the CLI for local settings, or manage a policy with nix-darwin or Home Manager.

Removing models and preventing their return are separate steps: cleanup removes existing models, and an installed configuration profile blocks future downloads.

Install

Homebrew

Requires macOS 27 and Xcode 27 or newer.

brew tap 4evy/pared https://github.com/4evy/pared.git
brew install 4evy/pared/pared

Nix

On Apple silicon, with Nix flakes enabled:

nix run github:4evy/pared -- status
nix profile install github:4evy/pared

To build a local checkout, run nix build. The executable is ./result/bin/pared.

Use

Start by checking the feature names and current policy:

pared features
pared status

A new policy defaults to disabled for every feature. The CLI stores it in ~/Library/Application Support/pared/policy.json. status reports both the policy you requested and the preferences it can read; the policy alone does not prove that macOS enforces those settings.

Starting from a new policy, this example enables Writing Tools and leaves all other features disabled:

pared enable writingTools
pared profile open

Finish installing the generated profile in System Settings. Until you replace an existing profile, its settings remain enforced. enable, disable, and reset save the new policy even when the installed profile overrides it. Enabling a feature permits its use; it does not download its models.

Once the profile is installed, preview and run cleanup:

pared models cleanup --dry-run
pared models cleanup

Cleanup selects a model only when all of its consumers listed in Pared's catalog are disabled. A shared model stays available if any known consumer is enabled or unmanaged. enable and disable do not delete models themselves.

To stop managing a feature, remove its local preferences and replace the profile:

pared reset inlinePredictions
pared profile open

reset removes preference overrides; it does not restore values saved before Pared ran. Apple supplies the defaults where no other policy applies.

Download models again

Enable the feature and install the replacement profile before requesting its models. For a feature with a download mapping in the catalog, such as Genmoji:

pared enable genmoji
pared profile open
# Finish installing the profile in System Settings before continuing
pared models download genmoji
pared models status genmoji

A successful download request means Apple's service accepted the subscription. The download continues in the background. models status reports a snapshot and local asset directories, not live progress or reclaimed disk space. For features without a download mapping, enable them in their Apple app.

Run pared --help for all commands. Use --policy FILE to read an existing policy at another path; this matters when inspecting settings generated by Nix.

nix-darwin / Home Manager

Add inputs.pared.url = "github:4evy/pared"; to your flake. Choose one of the modules below.

nix-darwin

Pass inputs through specialArgs, then add this to your Darwin config:

{ inputs, ... }:
{
  imports = [ inputs.pared.darwinModules.default ];

  programs.pared = {
    enable = true;
    defaultState = false;
    features = {
      writingTools = true;
      notificationSummaries = false;
      spatialPhotos = null;
    };
  };
}

Home Manager

Pass inputs through extraSpecialArgs, then add this to your home config:

{ inputs, ... }:
{
  imports = [ inputs.pared.homeManagerModules.default ];

  programs.pared = {
    enable = true;
    defaultState = false;
    features = {
      writingTools = true;
      notificationSummaries = false;
      spatialPhotos = null;
    };
  };
}

In this example, Writing Tools is enabled, Spatial Photos is unmanaged, and all other features are disabled by defaultState = false. true enables a feature, false disables it, and null omits it from generated settings. Changing a Nix option to null does not remove preferences written earlier.

Rebuild your configuration. For nix-darwin's user preferences, configure system.primaryUser. Then install disable-apple-intelligence.mobileconfig from /etc/pared (nix-darwin) or $XDG_CONFIG_HOME/pared (Home Manager, normally ~/.config/pared) through System Settings.

The same directory contains policy.json and declarations.json. CLI commands use their own policy path unless you pass --policy. For example, preview cleanup using the nix-darwin policy with:

pared models cleanup --policy /etc/pared/policy.json --dry-run

Change Nix-managed settings in your Nix configuration and rebuild; CLI edits to a policy in /nix/store are rejected. Deploy declarations.json through MDM (mobile device management) if you use it; it is not an installable profile.

Both modules remove models for disabled features during activation by default. They record the last successfully cleaned policy and skip cleanup when it is unchanged. A policy change triggers cleanup again; failures retry on the next activation. Set programs.pared.cleanupOnActivation = false; to opt out. Home Manager respects activation dry runs and keeps its cleanup record under $XDG_STATE_HOME/pared; nix-darwin uses /var/db/pared.

Cleanup does not install the profile. Install it to block future model downloads.

How it works

Pared uses a shared feature catalog to connect each feature to its preferences, management restrictions, and model asset sets. An asset set is a group of models managed by Apple's asset service. The CLI and Nix modules use this catalog to generate the same policy settings.

Under the hood

Preventing downloads. For each asset type whose known consumers are all disabled, the profile sets DownloadServerBaseURLOverride-<assetType> in com.apple.MobileAsset to https://127.0.0.1:9/pared-blocked/. mobileassetd reads these settings from /Library/Managed Preferences/com.apple.MobileAsset.plist; ordinary system defaults are denied by its sandbox. This redirects requests for the selected asset types to a loopback URL. Catalog checks and local retries can continue even while payload downloads are blocked.

The XPC connection. Pared loads UnifiedAssetFramework with dlopen and connects to com.apple.siri.uaf.subscription.service using NSXPCConnection. It calls operationWithConfig:completion: through Apple's UAFXPCProxyServiceInterface.defaultInterface, which supplies the wire signature and allowed object classes. The Objective-C bridge declares the oneway void operation and typed configuration getters; Swift does not invoke these selectors through perform. Runtime shape checks reject unknown asset metadata instead of treating it as an empty result.

Deleting models. Pared groups features by asset set and selects a set only when every known consumer is disabled in your policy. It reads each set's autoAssetType from UAFConfigurationManager and checks it against the catalog, then removes matching org.pared download subscriptions and sends a reset request like this:

{
  "Operation": "ResetAssetSets",
  "AssetSets": ["com.apple.modelcatalog"]
}

AssetSets is always explicit: omitting it means every asset set to the server. Apple's daemon performs the reset with the entitlements needed to remove protected assets, so SIP stays on. A successful reply confirms that the reset request returned without an error; check deletion logs and free space to assess the result.

Downloading again. Enable the feature and install the replacement profile before requesting a download. The replacement omits blocks for enabled or unmanaged consumers. Resetting a CLI preference alone does not replace an installed profile. Removing the profile removes its managed download blocks.

Pared resolves usage aliases and checks explicit usage names against Apple's configuration, then builds UAFAssetSetSubscription objects with initWithName:assetSets:usageAliases:. It sends Unsubscribe followed by Subscribe to refresh the selected subscriptions, since reset removes assets but can leave their subscription records behind. Apple's service then handles the download in the background.

Similar projects

Other approaches to removing Apple Intelligence models:

Reference

apple-intelligence
cli
home-manager
macos
nix
nix-darwin
swift