| name | macos-discovery |
| description | This skill should be used when the user asks to "add app to hints database", "research app settings", "find application preferences", "discover config paths", "macOS config discovery", "where does [app] store settings", or needs to understand where macOS applications store their settings and configuration files. |
| version | 1.0.0 |
macOS Application Configuration Discovery
This skill provides knowledge and methodology for discovering where macOS applications store their configuration files, preferences, and settings. It enables effective contribution to MacInventory's hints database.
Overview
macOS applications store their configuration in predictable locations based on app type, development era, and sandboxing status. Understanding these patterns enables systematic discovery of config paths for any application.
The Three-Tier Discovery System
MacInventory uses a three-tier approach to find application configurations:
- Tier 1 - Hints Database: Curated YAML entries with verified config paths (highest trust)
- Tier 2 - Conventions: Automatic scanning of standard macOS locations
- Tier 3 - LLM Research: Web search and intelligent discovery for unknown apps
This skill supports all three tiers by providing the knowledge needed to research and document application configurations.
Standard macOS Configuration Locations
Primary Locations (Check First)
| Location | Purpose | Typical Contents |
|---|---|---|
~/Library/Application Support/ |
Modern app data | Databases, caches, configs |
~/Library/Preferences/ |
Preference plists | .plist settings files |
~/.config/ |
XDG standard | CLI tool configs |
~/Library/Containers/ |
Sandboxed apps | App-specific storage |
Secondary Locations (App-Specific)
| Location | Purpose | Example Apps |
|---|---|---|
~/.appname/ |
Dotfile configs | CLI tools, dev tools |
~/Library/Group Containers/ |
Shared app data | iCloud-enabled apps |
~/Library/Caches/ |
Cache data | All apps (usually exclude) |
~/Library/Saved Application State/ |
Window states | GUI apps |
Environment-Specific Paths
For detailed information on each location and its typical contents, see references/common-paths.md.
App-Hints.yaml Entry Format
To add an application to the hints database, create a YAML entry with this structure:
app-name:
bundle_id: com.developer.AppName # Required (null for CLI tools)
install_method: cask # Required: cask | formula | mas | dmg | system
configuration_files: # Paths relative to $HOME (no ~/ prefix)
- Library/Application Support/AppName/
- Library/Preferences/com.developer.AppName.plist
xdg_configuration_files: # Paths relative to ~/.config (optional)
- appname/config.yaml
exclude_files: # Files/dirs to skip during backup
- "*.log"
- "Cache/"
- "*.tmp"
notes: |
Optional notes about the app's config behavior,
special considerations, or discovery methodology.
Field Descriptions
- bundle_id (required): macOS bundle identifier - get with
osascript -e 'id of app "AppName"'. Usenullfor CLI tools. - install_method (required): How the app is installed -
cask|formula|mas|dmg|system - configuration_files: Paths relative to
$HOME(no~/prefix). For files like~/Library/... - xdg_configuration_files: Paths relative to
$XDG_CONFIG_HOME(default~/.config/). For files like~/.config/appname/ - exclude_files: Glob patterns for files/dirs to skip during backup
- notes: Optional context about the app or special handling needed
IMPORTANT: Paths are RELATIVE - use Library/Application Support/App/ not ~/Library/Application Support/App/
For a complete template with all optional fields, see examples/hints-entry-template.yaml.
Discovery Methodology
Quick Discovery Checklist
When researching where an app stores its configuration:
- Check standard locations first - Most apps use conventional paths
- Search for the app's bundle ID - Find with:
osascript -e 'id of app "AppName"' - Look in Application Support - Most modern apps:
ls ~/Library/Application\ Support/ | grep -i appname - Check Preferences - Traditional plist:
ls ~/Library/Preferences/ | grep -i appname - Try XDG config - CLI tools:
ls ~/.config/ | grep -i appname - Check for dotfiles - Some tools:
ls -la ~/ | grep -i appname
Research Resources
When standard locations don't yield results:
- Official documentation: Check the app's docs/FAQ for "where are settings stored"
- GitHub repository: For open source apps, check README and code
- Stack Overflow: Search "[AppName] config file location mac"
- Reddit/Forums: Community discussions often reveal hidden paths
For detailed research methodology, see references/research-methodology.md.
Configuration File Patterns
Different types of apps follow different configuration patterns:
GUI Applications
Modern macOS GUI apps typically use:
~/Library/Application Support/AppName/for data and complex configs~/Library/Preferences/com.developer.AppName.plistfor simple preferences- Sandboxed apps:
~/Library/Containers/com.developer.AppName/
CLI Tools
Command-line tools commonly use:
~/.config/toolname/(XDG standard)~/.toolnameor~/.toolnamerc(traditional dotfiles)~/.toolname/config.yamlor similar
Development Tools
IDEs and dev tools often have complex configurations:
- Settings, keybindings, snippets (usually JSON or XML)
- Extensions/plugins directory
- Project-specific vs global settings
For comprehensive patterns by app category, see references/settings-patterns.md.
What to Exclude from Backup
Not everything in an app's directory should be backed up. Exclude:
Always Exclude
- Caches:
Cache/,Caches/,*.cache - Logs:
*.log,Logs/,log/ - Temporary files:
*.tmp,temp/,Temp/ - Generated data:
GPUCache/,Code Cache/ - Large databases:
*.sqlite(unless settings),*.db
Usually Exclude
- Updates:
Updates/,*.download - App backups:
Backups/,backup/ - Media caches:
MediaCache/,ImageCache/
Never Backup
- SSH keys:
id_rsa,id_ed25519, etc. - Certificates:
*.pem,*.key(non-config) - OAuth tokens: If stored in plaintext files
Validation Process
Before adding an entry to the hints database:
- Verify paths exist: Use Glob to confirm each path is present on the system
- Check file contents: Ensure files are configuration, not caches/data
- Test exclude patterns: Verify patterns correctly filter non-config files
- Validate YAML syntax: Use the validate-hints.py script
# Validate hints database (use installed plugin path)
PLUGIN_PATH=~/.claude/plugins/macinventory@MacInventory
python3 $PLUGIN_PATH/skills/macos-discovery/scripts/validate-hints.py \
$PLUGIN_PATH/data/app-hints.yaml
Utility Scripts
This skill includes utility scripts in scripts/:
- validate-hints.py: Validate app-hints.yaml entries for correctness
- test-security-patterns.py: Test security pattern matching
Additional Resources
Reference Files
For detailed information beyond this overview:
references/common-paths.md- Complete guide to macOS config locationsreferences/settings-patterns.md- Config patterns by application typereferences/research-methodology.md- How to research unknown apps
Examples
examples/hints-entry-template.yaml- Complete template for new entries
Integration with MacInventory
This skill supports:
- Adding apps to hints database - Research and create YAML entries
- Tier 3 discovery - Used by app-discovery agent for unknown apps
- Validation - Verify discovered paths are actual configurations
- Documentation - Understanding macOS config conventions