Skip to content

Latest commit

 

History

History
341 lines (257 loc) · 13.6 KB

cli.md

File metadata and controls

341 lines (257 loc) · 13.6 KB

Pared from the terminal

Run pared wizard for guided setup or use the commands below. Requires Apple silicon and macOS 27 or newer.

Install

Guided installer

Run in Terminal:

curl --fail --location --proto '=https' --proto-redir '=https' \
  --output "$HOME/Downloads/pared-install.sh" \
  https://github.com/4evy/pared/releases/latest/download/install.sh &&
sh "$HOME/Downloads/pared-install.sh"

The installer verifies the CLI’s SHA-256 checksum and opens the wizard. No Xcode or Homebrew needed.

Choose Install Pared to install in ~/.local or another directory. If you add Pared to your shell’s PATH, open a new terminal window afterward. Updating keeps your policy and refuses to overwrite an unrelated installation.

For offline installation, download install.sh, pared-macos-arm64.tar.gz, and pared-macos-arm64.tar.gz.sha256 from the same release into one folder:

sh install.sh --archive ./pared-macos-arm64.tar.gz

Put --archive first. Remaining arguments go to the wizard: --prefix /full/path suggests an installation directory, and --policy FILE opens a policy. Run sh install.sh --help for all options.

Homebrew

Install Xcode 27 or newer, then run:

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

Nix

With Nix flakes enabled:

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

From a local checkout, nix build produces ./result/bin/pared.

Guided setup

Run pared wizard and choose Guided setup. It walks through feature choices, profile installation, optional model removal, and CLI installation. You can skip steps; completed actions are kept.

Use arrow keys and Enter to navigate, Space to select features, and / to search. Change more features combines choices before saving. A new policy starts with everything off; review the draft before saving or discard it to leave settings unchanged. Model removal has a separate preview and confirmation.

Use --policy FILE to open or create another policy. The wizard needs a terminal at least 40 columns wide and 16 rows tall. Confirmations default to No; removal previews list model groups, not disk space.

Inspect your settings

pared features
pared status

features lists names for commands. status shows saved choices and readable preferences, not runtime enforcement. Choices form a policy, stored at ~/Library/Application Support/pared/policy.json by default. Use --policy FILE with a command to select another path.

Choose features and install the profile

Starting with a new policy, this enables Writing Tools and leaves every other feature disabled:

pared enable writingTools
pared profile open

Install the profile in System Settings to apply supported controls and block unwanted model downloads. Replace it after every change; its settings stay in effect until replaced or removed. Some controls require device management; see profile compatibility.

enable, disable, and reset save choices and apply supported local preferences. They do not download or remove models.

Remove downloaded models

After installing the matching profile, preview removal:

pared models cleanup --dry-run

Remove them without a confirmation prompt:

pared models cleanup

Only groups whose known features are all disabled are removed. Shared models stay if any feature in Pared’s catalog is enabled or unmanaged.

To check Apple's current model mappings without removing anything:

pared models cleanup --review

The JSON report lists supported sets in targets and unavailable mappings in skipped, with a reason for each skipped set. --dry-run only lists sets eligible under your policy; it does not check their mappings. Choose either --review or --dry-run.

To remove a reviewed subset, pass each set from targets with --asset-set:

pared models cleanup --asset-set com.apple.modelcatalog

Repeat --asset-set for more sets. Each must be unique and still eligible under your policy; Pared rechecks mappings before removal. The app and wizard show supported and skipped sets in their removal review and keep skipped sets. Unselected sets are kept.

Cleanup exits 1 if selected model folders remain. If macOS accepts removal but Pared cannot inspect the folders, it exits 3: removal is unverified. Pared warns before requesting removal if folder inspection is already unavailable. A folder access error does not show whether models are in use. Check Full Disk Access in System Settings -> Privacy & Security for your terminal app (or Pared when using the GUI), then quit and reopen it before running pared models status again. Checking status does not repeat removal.

When folder verification is unavailable, cleanup also checks recent MobileAsset daemon logs. It reports completed elimination only when every selected asset type has a successful completion and a matching request with no remaining payload descriptors or locked payloads. Missing, unreadable, or changed log records remain inconclusive. This confirms the daemon's result; it does not independently verify protected folders or measure reclaimed space, so exit 3 still applies. Pared does not repeat deletion to obtain these records.

Full Disk Access entries for ad-hoc builds can trust an older binary; remove and re-add the current app if its permission stopped working after a rebuild. Some model storage also requires restricted Apple entitlements. Sudo and Full Disk Access cannot supply those, so folder verification can remain unavailable even with both enabled.

If listing is denied, Pared tries directory entry-count metadata. It can verify an empty type directory, or a type directory containing only an empty purpose_auto directory. It rejects symbolic links and retains the access error for unfamiliar or unreadable layouts. For nonempty protected storage, Pared asks Apple's subscription daemon for asset paths, then checks each candidate with filesystem metadata. It accepts the known purpose_auto layout only when the asset directories and observed XML catalog or its .purged copy account for every entry, with unchanged directory identity, entry counts, and modification/change times. Missing candidates, extra entries, and symbolic links leave inventory unknown. models status includes directoryEntries when this broker listing succeeds. When inventory proves there are no payloads, status skips the atomic-instance query that would otherwise fail because its lock file is absent. This does not grant access to model files.

Ask the daemon for paths and parsed asset metadata:

pared models inventory
pared models inventory --asset-type com.apple.MobileAsset.UAF.FM.Overrides

This is a read-only broker view. reportedAssets contains Apple's reported locations and metadata; it does not contain the original Info.plist or XML catalog bytes. Archive decryption keys are omitted. An empty or partial daemon reply cannot establish an empty directory. The daemon omits some file fields, including download and retention policies, so metadataFileContentsComplete remains false. directoryListingComplete is true only when filesystem metadata verifies coverage, proves an empty known layout, or confirms that the type directory does not exist. Incomplete coverage exits 1 and includes inventoryError. The command does not subscribe, download, remove models, or retain asset locks.

For reported assets, inventory automatically reads Apple's configured catalog endpoint and audience, then makes an HTTPS metadata request. It sends the device model, hardware model, OS version, and OS build, without serial numbers or other unique device identifiers. Each request has a 32 MiB response limit and a 35-second resource timeout. It does not download model archives or cache the response on disk.

Each reportedAssets entry gets catalogMetadata only when its asset type, specifier, version, and archive ID match, every shared broker field agrees, and all compatible catalog entries have identical metadata. Uncompared local broker annotations appear in catalogUncomparedBrokerFields. Archive decryption keys remain omitted. catalogSource, catalogAssetSetID, and catalogPostingDate describe the published catalog; they do not prove the local catalog's cached state or file contents.

catalogMetadataMatched means every reported asset has a compatible, unambiguous published metadata record. It does not establish directory coverage or a read of the original files: directoryListingComplete and metadataFileContentsComplete retain their separate meanings. A missing asset, conflicting field, ambiguous metadata, or unavailable catalog leaves the catalog match incomplete and exits 1. A verified empty inventory needs no catalog request and reports zero matched assets. An empty broker view with incomplete directory coverage remains incomplete and exits 1.

macOS can retain an initial lock error after its forced removal succeeds. If Pared confirms that every selected model folder is gone, cleanup succeeds without offering to quit processes.

Inspect apps and services with selected model files open:

pared models holders

This prints an open-file snapshot as JSON. You can pass feature names to limit the selection. Open files do not prove which process blocked removal, and an empty result does not prove that there are no locks. Process visibility depends on privileges; running this read-only command with sudo can expose holders running under other accounts.

After unsuccessful cleanup, the GUI and wizard offer administrator inspection to find holders running under other accounts. Review the listed processes and choose Force Quit and Retry to terminate holders and retry removal once. macOS requests administrator authentication when another account owns a holder. Save your work first: force quit can lose unsaved work or running requests.

Pared rechecks the policy, process version, executable, and selected open files before signaling each holder. The kernel checks the process version again when delivering SIGKILL, so a reused PID does not become the target. If holders remain or restart, Pared shows them for review instead of killing them again. The retry uses the reviewed model sets and checks the resulting folders. Denied folder access still leaves removal unverified.

Foreground apps also have a normal-quit option. Apps can show a save prompt or refuse; this option checks status without repeating removal.

For models confirmed to be in use, close affected apps, log out or restart, then check pared models status before retrying. Check status after timeouts too: removal may already have happened.

Keep the profile installed to block new downloads. Pared checks folders, not recovered APFS space; System Settings may update its storage total later.

Keep Siri

To keep Siri while disabling other features:

pared disable all
pared enable siri siriVoiceTrigger
pared profile open

Install the updated profile, then check Siri in System Settings -> Apple Intelligence & Siri. siriVoiceTrigger controls voice activation separately; omit it if you only want keyboard activation.

Keeping Siri enabled or unmanaged keeps its shared foundation models; basic Siri is not guaranteed to work if you delete them. Siri-related services also serve other macOS features, so a running process alone does not show that Siri is on.

Let an app use its defaults

To stop managing a feature:

pared reset inlinePredictions
pared profile open

Install the replacement profile to finish. reset removes local overrides; it does not restore earlier values. Apple supplies 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, 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

Success means Apple accepted the request; downloads continue in the background. models status shows a snapshot and local folders, not live progress. For features without a download mapping, turn them on in their Apple app.

Open the macOS app

Run pared gui to open the native interface. Use File -> Open Settings File or pared gui --policy FILE to inspect another policy. Policies in /nix/store are read-only in the app; change them in Nix and rebuild.

For source builds, see the build instructions.

Use a Nix-managed policy

The CLI uses its own policy unless you pass --policy. For nix-darwin, preview cleanup using the generated policy with:

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

Home Manager puts its policy in $XDG_CONFIG_HOME/pared, usually ~/.config/pared. Change Nix-managed choices in your Nix configuration and rebuild; CLI edits to a policy in /nix/store are rejected.

Alongside the policy, disable-apple-intelligence.mobileconfig is the profile to install in System Settings. declarations.json is for supervised mobile device management (MDM) enrollment and cannot be installed there.

Both modules clean up eligible models during activation, retrying after policy changes or failures. Set programs.pared.cleanupOnActivation = false; to opt out. Activation does not install the profile. See the Nix setup guide for configuration.

Home Manager respects activation dry runs and stores its cleanup record in $XDG_STATE_HOME/pared; nix-darwin uses /var/db/pared.

Run pared --help for all commands. Read how profiles and model removal work for implementation details.