Skip to main content

What Are Personas?

Personas customize how Sorty organizes files by providing specialized AI instructions for different workflows. They modify the AI’s grouping strategies, naming conventions, and organizational philosophy.
Personas are injected into the system prompt and override default organization rules.

Built-In Personas

General

Best for: Most users, mixed file types, general organizationStrategy:
  • Group by file category (Documents, Images, Audio, Video, Archives)
  • Sub-group by specific type or context
  • Date-based organization for time-sensitive files
  • Context clustering for related files

Developer

Best for: Software developers, programmers, technical projectsStrategy:
  • Group by programming language or technology stack
  • Detect projects via package.json, Cargo.toml, go.mod, .xcodeproj
  • Organize by src/, lib/, tests/, docs/, config/
  • Recognize build artifacts (node_modules/, target/, build/)

Photographer

Best for: Photographers, photo enthusiasts, visual artistsStrategy:
  • Group by date (Year/Month or Year/Event)
  • Extract EXIF data (camera model, date taken, GPS location)
  • Detect events (photos taken same day/location)
  • Separate RAW files from JPEGs
  • Identify edited files (“_edit”, “_final”, “-2” suffixes)

Office

Best for: Business professionals, office work, client managementStrategy:
  • Group by client or project name
  • Organize by document type (Contracts, Invoices, Reports, Proposals)
  • Date-based subfolders (Year/Quarter)
  • Detect client names in filenames
  • Track versions (v1, v2, draft, final)

Custom Personas

Create your own personas for specialized workflows:

Creating a Custom Persona

1

Generate with AI

Navigate to Settings → Personas → GenerateDescribe your workflow:
"I organize scientific research papers by topic and author."
Sorty will generate a custom persona with appropriate organization rules.
2

Manual Creation

Navigate to Settings → Personas → Create
  • Name: Research Papers
  • Icon: book
  • Description: Organize academic papers by topic and author
  • System Prompt: Write your custom organization rules
3

Test & Refine

Use the persona on a test directory and refine the prompt based on results.

Example Custom Personas

## Music Producer Specialization:
- **Primary grouping**: By project/song name
- **Subfolders**: Stems, Samples, Mixdowns, Masters
- **File types**: WAV, MP3, FLAC, MIDI, project files (.als, .flp, .logic)
- **Version tracking**: v1, v2, mix1, master_final
- **Sample organization**: By instrument type or pack name

Preferred structure:
- Projects/[SongName]/Stems/, Mixdowns/, Masters/
- Samples/Drums/, Samples/Synths/, Samples/Vocals/
- Templates/
- Archives/
## Student Specialization:
- **Primary grouping**: By subject or course
- **Subfolders**: Lectures, Assignments, Exams, Notes
- **Date organization**: By semester or academic year
- **Project detection**: Group related assignment files

Preferred structure:
- Courses/[Subject]/Lectures/, Assignments/, Exams/
- Projects/[ProjectName]/
- Resources/Textbooks/, References/
- Personal/Notes/
## Content Creator Specialization:
- **Primary grouping**: By platform or content series
- **Subfolders**: Raw Footage, Edited, Thumbnails, Scripts
- **Date organization**: By upload date or filming date
- **Project detection**: Group video project files with assets

Preferred structure:
- YouTube/[Series]/Episodes/, Shorts/
- Instagram/Reels/, Posts/, Stories/
- TikTok/
- Assets/B-Roll/, Music/, Graphics/
- Archives/Published/

Persona Manager

Personas are managed by the PersonaManager class:
@MainActor
public class PersonaManager: ObservableObject {
    @Published public var selectedPersona: PersonaType = .general
    @Published public var selectedCustomPersonaId: String?
    @Published public var customPrompts: [PersonaType: String] = [:]
    
    public func selectPersona(_ persona: PersonaType) {
        selectedPersona = persona
        selectedCustomPersonaId = nil
        savePersona()
    }
    
    public func selectCustomPersona(_ id: String) {
        selectedCustomPersonaId = id
        saveCustomPersonaId()
    }
    
    public func getEffectivePrompt(customStore: CustomPersonaStore) -> String {
        if let customId = selectedCustomPersonaId,
           let custom = customStore.customPersonas.first(where: { $0.id == customId }) {
            return custom.promptModifier
        }
        return getPrompt(for: selectedPersona)
    }
}

Customizing Built-In Personas

You can override built-in persona prompts:
1

Navigate to Advanced Settings

Settings → Advanced → Persona Customization
2

Select Persona

Choose the persona to customize (e.g., Developer)
3

Edit System Prompt

Modify the prompt to suit your needs:
## Developer Mode (Custom):
- Group by monorepo structure
- Separate frontend from backend
- Keep Docker configs together
- Organize by microservice
4

Reset if Needed

Click Reset to Default to restore the original prompt
Custom prompts persist per-persona and are stored in UserDefaults.

Persona Selection in CLI

Use personas from the command line:
# Organize with Developer persona
sorty organize ~/Code --persona developer

# Organize with Photographer persona
sorty organize ~/Photos --persona photographer

# Organize with custom persona
sorty organize ~/Research --persona custom:research-papers

Persona-Specific Learnings

The Learnings system can track preferences per-persona:
// Learnings context includes persona info
if let learnedContext = learningsManager?.generatePromptContext(forFolder: folderPath) {
    instructions += "\n\n" + learnedContext
}
The same correction in Developer mode vs. Photographer mode is treated differently by the learning system.

How Personas Affect Organization

Priority Rules

  1. User Custom Instructions (highest priority)
  2. Persona-Specific Prompt
  3. Learned Preferences
  4. System Defaults

Example Comparison

Input Files:
main.py
utils.py
data.csv
results.png
Output:
Code/
├── main.py
└── utils.py
Data/
└── data.csv
Images/
└── results.png

Persona Chat (Experimental)

Interact with your persona via chat to refine organization:
// Persona chat allows iterative refinement
personaChat.ask("How should I organize client contracts?")
// Response: "I recommend Clients/[Name]/Contracts/[Year]/"
This feature is experimental and may not be available in all versions.

The Learnings

Train the AI on your organization preferences

File Organization

Learn how AI organization works

AI Providers

Configure your AI backend