Application Resolution in Peekaboo
This document explains how Peekaboo resolves applications across all commands that accept an application parameter.
#Overview
Peekaboo supports multiple ways to identify and target applications:
- Application Name - Human-readable name (e.g., "Safari", "Google Chrome")
- Bundle ID - Unique application identifier (e.g., "com.apple.Safari")
- Process ID (PID) - Numeric process identifier
- Fuzzy Matching - Partial name matching for convenience
#Command Line Parameters
Most commands that work with applications support two parameters:
--app- Application name, bundle ID, or PID in format "PID:12345"--pid- Direct process ID as a number
#Examples
# By application name
peekaboo image --app Safari
# By bundle ID
peekaboo window close --app com.apple.Safari
# By PID using --app parameter
peekaboo menu list --app "PID:12345"
# By PID using --pid parameter
peekaboo app quit --pid 12345
# Both parameters (when they refer to the same app)
peekaboo window focus --app Safari --pid 12345
#Resolution Methods
#1. Application Name
The most common method - uses the localized application name:
peekaboo image --app "Google Chrome"
peekaboo window list --app TextEdit
Features:
- Case-insensitive matching
- Supports spaces in names
- Uses localized names (what you see in the UI)
#2. Bundle Identifier
More precise than names, bundle IDs are unique:
peekaboo app launch --app com.microsoft.VSCode
peekaboo window close --app com.google.Chrome
Features:
- Exact matching only
- Always lowercase
- Guaranteed unique per application
#3. Process ID (PID)
Direct process targeting using numeric IDs:
# Using --pid parameter
peekaboo app quit --pid 67890
# Using --app parameter with PID: prefix
peekaboo window focus --app "PID:67890"
# Finding PIDs
peekaboo list apps # Shows all PIDs
Features:
- Most precise targeting method
- Works even if app name is unknown
- Useful for scripting and automation
#4. Fuzzy Name Matching
Peekaboo supports partial name matching for convenience:
# Matches "Visual Studio Code"
peekaboo image --app "visual"
peekaboo image --app "code"
peekaboo image --app "studio"
# Matches "Google Chrome"
peekaboo window list --app chrome
Algorithm:
- First tries exact match (case-insensitive)
- Then tries "contains" match
- Prioritizes running applications
- Falls back to installed applications
#Lenient Parameter Handling
Peekaboo is designed to be forgiving with parameters, especially for AI agents that might provide redundant information.
#Allowed Redundancy
These are all valid and equivalent:
# Redundant PID specifications
peekaboo window close --app "PID:12345" --pid 12345
# Name and PID for same app
peekaboo image --app Safari --pid 67890 # If PID 67890 is Safari
#Conflict Detection
These will produce errors:
# Different PIDs
peekaboo window close --app "PID:12345" --pid 67890
# Name doesn't match PID
peekaboo image --app Safari --pid 12345 # If PID 12345 is Chrome
#Implementation Details
#ApplicationResolvable Protocol
All commands with application parameters conform to the ApplicationResolvable protocol:
protocol ApplicationResolvable {
var app: String? { get }
var pid: Int32? { get }
}
This ensures consistent behavior across all commands.
#Resolution Priority
When both --app and --pid are provided:
- Validate they refer to the same application
- Prefer the more readable format (name/bundle) for operations
- Use PID for precise targeting when needed
#Error Messages
Clear error messages help users understand issues:
"No application found with name 'Safarii'"- Typo in name"Application 'Safari' is not running"- App not launched"Process with PID 12345 not found or terminated"- Invalid PID"Application mismatch: --app 'Safari' does not match PID 12345 (Chrome)"- Conflict
#Best Practices
#For Users
- Use names for readability:
--app Safariis clearer than--app "PID:12345" - Use PIDs for precision: When scripting or targeting specific instances
- Use bundle IDs for reliability: When app names might be ambiguous
#For Scripts
# Get PID for scripting
PID=$(peekaboo list apps --json | jq '.applications[] | select(.app_name=="Safari") | .pid')
peekaboo window close --pid $PID
# Or use bundle ID
peekaboo app launch --app com.apple.Safari
#For AI Agents
AI agents can safely:
- Provide both
--appand--pidif unsure - Use PID format in either parameter
- Mix formats as needed
The lenient validation ensures the command works if the parameters are consistent.
#Common Patterns
#Finding Applications
# List all running apps with PIDs
peekaboo list apps
# Find specific app
peekaboo list apps | grep -i safari
#Window Management
# List windows for an app
peekaboo list windows --app Safari
# Focus specific window
peekaboo window focus --app Safari --window-title "GitHub"
#Cross-Space Operations
# Move window to current space (finds app by any method)
peekaboo space move-window --app Terminal --to-current
peekaboo space move-window --pid 12345 --to 2
#Troubleshooting
#Application Not Found
Symptoms:
"Application 'X' not found""No running application matches 'X'"
Solutions:
- Check spelling:
peekaboo list apps - Try partial name:
--app chromeinstead of--app "Google Chrome" - Use bundle ID:
--app com.google.Chrome - Use PID directly: Find with
list apps, then use--pid
#PID Issues
Symptoms:
"Process with PID X not found""Invalid PID format"
Solutions:
- Verify PID is current:
peekaboo list apps - Check format:
--app "PID:12345"needs quotes and prefix - Use
--pid 12345for direct numeric PIDs
#Multiple Matches
Symptoms:
- Fuzzy matching finds wrong app
- Multiple apps with similar names
Solutions:
- Use full name:
--app "Visual Studio Code"not--app code - Use bundle ID for precision
- Use PID for exact targeting
#See Also
- Command index - Full command documentation
- Agent chat - Using Peekaboo with AI agents
- Automation guide - Scripting and automation patterns