# Sorty previews every move, and the download needs sudo xattr because nothing is signed

> Sorty is a native macOS SwiftUI app that sorts files into semantically named folders using an AI provider you choose. Nothing is notarized or code-signed, watched folders depend on security bookmarks that break when the app moves, and every move can be previewed and rolled back.

**sorty-organizer/Sorty** — Sorty: free open-source AI folder organizer for macOS

- Repository: https://github.com/sorty-organizer/Sorty
- Website: https://sorty-organizer.github.io/Sorty/
- Stars: 50 · Forks: 5
- Language: Swift
- License: GPL-3.0
- Published: 2026-08-26 · Updated: 2026-08-26 · Language: en
- Canonical page: https://hysenlabs.com/projects/sorty-organizer-sorty

## Nothing is notarized, so the first launch needs sudo xattr

The fast install path is a zip from the Releases page, unzipped, with `Sorty.app` dragged into `/Applications`. Then one terminal command:

```bash
sudo xattr -cr /Applications/Sorty.app
```

The reason is stated plainly in the README: the app is not notarized and carries no Apple Developer certificate, so macOS quarantine metadata blocks it from opening. Removing the extended attribute clears that block.

Two qualifications come with the command. It changes attributes only on the `Sorty.app` copy in `/Applications`, not on your download elsewhere, and the README says to use it only for a copy obtained from this repository.

Moving the app to `/Applications` is described as highly recommended for a different reason than convenience, since it is what makes security bookmarks for Watched Folders persist reliably across restarts. Building from source is offered as the alternative for anyone who would rather keep signing under their own control.

## Watched folders lose access when the app is not in /Applications

Sorty can monitor folders in the background through a Watched list in the sidebar, and that feature rests on macOS security bookmarks. When the bookmark is invalidated, the app reports that access to the folder has been lost, showing an error such as Permission Denied or a missing bookmark.

The documented cause is App Sandbox restrictions, and the documented fixes are short. Make sure the app is running from `/Applications`. Then remove the folder from the Watched list and add it again, which refreshes the security bookmark.

That failure mode is not cosmetic. An organizer that has lost permission to a folder mid-run has lost the ability to complete the move it had planned, and the fix requires the app to be relaunched from a specific location rather than from a folder in Downloads or a temporary directory. If you test the app from a disk image or a build output path, expect the Watched list to need rebuilding on every move.

## Auto-Organize stays disabled until a provider is configured

Organization runs through an AI provider, so nothing happens until one is set. The Settings tab holds it, with an OpenAI-Compatible option that takes an API URL and a private key, and an Apple Foundation Models option that requires macOS 26 with Apple Intelligence enabled.

The provider list is wider than those two. OpenAI, OpenCode Zen and Go, Anthropic, Gemini, Groq, OpenRouter, Ollama and custom OpenAI-compatible endpoints are all named, which covers both hosted services and a local model.

The symptom of a missing provider is specific: Auto-Organize appears greyed out or does nothing, and the check is Settings, then AI Provider. The same gate applies to background monitoring, since Watched folders can be added at any time but the automatic organisation they trigger stays off until a valid provider exists. Providers that accept images get multimodal analysis, so picture content can influence the folder a file lands in rather than only its filename and type.

## What leaves the Mac is relative structure and metadata, not whole files

The privacy story is specific enough to check against your own setup. File analysis runs through the provider you chose, whether that is a supported cloud service, Ollama, or Apple Foundation Models. What Sorty sends is relative folder structure and available file metadata. Deep Scan goes further but stays bounded, extracting supported content locally and then sending text and metadata summaries.

Credentials and learned behaviour are handled separately. API keys live in the macOS Keychain. The Learnings profile, the passive system that trains from your existing folder structures, your manual corrections and even cancelled organizations, is encrypted with AES-256 and unlocked by Touch ID or your Mac login password.

Privacy Mode is on by default. It blurs sensitive handles until hover and hides API keys behind a manual reveal toggle, which is a screen-sharing and screenshot mitigation rather than a network setting.

The project's own recommendations follow from this: use Ollama or Apple Foundation Models for on-device processing, give the model enough context capacity before pointing it at a very large directory, review what is being sent when a cloud provider is configured, turn on Safe Deletion for duplicates, and back up before a first run.

## The Finder extension depends on one App Group identifier

Right-clicking a folder in Finder and starting the organization process is a Finder extension, and the extension has its own target in the project, `SortyFinderSync`. Wiring it up has three steps, all under Settings, then Finder Integration: use Activate or Repair if the extension needs attention, then use Open Extensions and confirm SortyFinderSync is enabled in macOS Extensions settings.

The requirement behind those steps is the one to know before building. The extension needs App Groups configured in both the main app target and the extension target, using the identifier `group.com.sorty.app`. Miss it and the extension will not see what the app does, no matter what the Extensions pane says.

That constraint is why the Makefile exposes `ENABLE_FINDER_EXTENSION`, defaulting to false. A fast build loop leaves the Finder extension out, which is the sane default for a developer running the app from a build directory where a bookmarked watched folder would not survive anyway.

## A $sorty skill lets Codex drive the app instead of guessing

The repository ships a `$sorty` skill for Codex, so an agent can ask for the app's work rather than trying to organise files itself. Ask it to organize, rename, scan for exact duplicates, preview a plan, or roll back work.

The division of labour is explicit. The skill opens the Sorty app and defers to it for the native features: Finder integration, watched folders, personas, Learnings, provider settings and interactive previews. What the agent gets is the plan and the instruction, not a hand-rolled file move.

Setup, examples and safety rules are in `docs/sorty-skill.md`, and the root of the repository holds `skills-lock.json` alongside an `AGENTS.md` and a `.agents/` directory, so the agent-facing surface is versioned with the app rather than living in a chat log.

Custom Personas sit on the other side of the same boundary. A persona is a profile you create and edit for a workflow, with Developer, Photographer and Student given as examples, and it shapes the folder names and categorisation the app proposes.

## The Makefile points SwiftPM at a cache directory and turns the index store off

Sorty builds with SwiftPM and the Makefile exists to make repeat builds fast. It auto-detects core count and passes it through:

```bash
CORES := $(shell sysctl -n hw.ncpu 2>/dev/null || echo 4)
PARALLEL_FLAGS := -j $(CORES)
```

It also moves the build directory out of the checkout to `$(HOME)/Library/Caches/Sorty/build`, exports that as `SWIFTPM_BUILD_DIR`, and passes `--scratch-path` pointing at the same place. Both debug and release builds add `--disable-index-store` with the comment that scripted builds do not serve editor indexing, plus `--disable-sandbox`. A comment explains that Package.swift owns compiler and linker settings so builds and tests share one incremental compilation signature instead of invalidating each other.

The fast loop flags are the interesting part: `FAST_DEV_MODE=true`, `ENABLE_ADHOC_SIGNING=true`, `ENABLE_SPARKLE_SIGNING=false`, `PRESERVE_APP_BUNDLE=true` and `SKIP_GIT_INJECT=true`. A comment explains why the app identity has to stay stable: so macOS continues granting the replacement binary access to the Keychain credentials created by the previous build. Signing off for Sparkle in a dev loop is what stops the updater from interfering while you iterate.

## History with rollback is the safety net, not a dry run

The safety story has three layers. Interactive Preview lets you review and adjust the suggested organisation before any file moves. Safe by Design adds dry-run modes, validation, duplicate protection settings and exclusion rules. Organization History records every operation with analytics and the reasoning behind it, and supports rollback.

The distinction matters because a preview and a history answer different questions. A preview tells you what the app intends to do with the directory in front of you. History tells you what it did, when, and why, which is the only thing that helps after a schedule has run unattended on a watched folder.

The repository layout points at how much of this is test infrastructure rather than app code: a `Benchmarks/` directory, a `QualityCorpus/`, `Tests/`, `Packages/` with `Package.resolved`, plus `Assets/`, `Resources/`, `SortyWidgets/` for the widget extension and `Sorty.entitlements` for the sandbox profile. `.gitleaks.toml` sits at the root next to `SECURITY.md`, and the release cadence is visible in tags: v1.2.1 on 2026-09-23, v1.2.0 on 2026-07-11 and v1.1.2 on 2026-03-04, with the last push on 2026-09-30.

## Conclusion

Sorty suits a Mac user who wants folders named by meaning rather than by folder number, and who will spend an afternoon on provider setup, the Finder extension and the App Group before trusting it with a real directory. It does not suit anyone who needs a signed build, because releases carry no certificate and the first launch needs a sudo xattr. Before pointing it at anything you care about, run a dry run on a copy of a small directory and enable Safe Deletion, then confirm Organization History shows the rollback you expect before letting it touch the original.

## FAQ

### What do I need before building Sorty from source?

macOS 15.0 or later and Xcode 16.0 or later, plus an API key for OpenAI or a compatible provider if you want provider-backed analysis. Building is done with make run after cloning, or by opening Sorty.xcodeproj and pressing the run shortcut on the Sorty scheme.

### Why does Sorty tell me to run sudo xattr after installing?

Pre-built releases are not code-signed and carry no Apple Developer certificate, so macOS quarantine metadata can block the app from opening. Running sudo xattr -cr /Applications/Sorty.app clears the quarantine attribute on that copy only.

### Why is Auto-Organize disabled in Sorty?

It stays disabled until a valid AI provider is configured under Settings, then AI Provider. An OpenAI-compatible setup needs an API URL and a private key, and Apple Foundation Models needs macOS 26 or later with Apple Intelligence enabled.

### Does Sorty send my files to a cloud AI provider?

It sends relative folder structure and available file metadata to the provider you selected. Deep Scan extracts supported content locally and sends bounded text and metadata summaries, and Ollama or Apple Foundation Models keep processing on device. API keys are stored in the macOS Keychain.

### What should I do when Sorty loses access to a watched folder?

Make sure the app is running from /Applications, then remove the folder from the Watched list and add it again to refresh the security bookmark. The loss usually comes from macOS App Sandbox restrictions after the app has been moved.

### Can I undo an organization run in Sorty?

Yes. Organization History tracks every operation with detailed analytics, reasoning and rollback support, and Interactive Preview lets you review and adjust suggested moves before any file is touched.

## Sources

- [Official documentation](https://sorty-organizer.github.io/Sorty/)
- [Official README](https://github.com/sorty-organizer/Sorty#readme)
- [Project repository](https://github.com/sorty-organizer/Sorty)
- [Release notes](https://github.com/sorty-organizer/Sorty/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/sorty-organizer-sorty
