macOS Window Controller is a automation Claude Skill built by Diego Rodrigues de Sa e Souza. Best for: macOS developers automate window management, distinguish sandbox vs production IDEs, and capture screenshots for debugging workflows..
Find, activate, and screenshot macOS windows across Spaces with filtering by app, title, path, and process arguments.
Find, activate, and screenshot macOS windows across Spaces. Supports filtering by application name, window title (regex), process path, and command line arguments.
# List ALL windows
/window-controller list
# Find windows by app name (partial match)
/window-controller find "GoLand"
# Find windows by title pattern (regex)
/window-controller find --title "research.*"
# Activate window (switches to its Space)
/window-controller activate "GoLand"
# Take screenshot of window (saves to artifacts by default)
/window-controller screenshot "GoLand"
# Get window info as JSON (for automation)
/window-controller find "GoLand" --json
# Partial match on kCGWindowOwnerName
/window-controller --find "GoLand"
/window-controller --find "Chrome"
# Match window title with regex
/window-controller --find --title "monokai-islands"
/window-controller --find --title ".*\.py$"
/window-controller --find "GoLand" --title "research"
# Filter by executable path
/window-controller --find "GoLand" --path-contains "Applications"
/window-controller --find "GoLand" --path-excludes "~/Applications/"
# Filter by process command line
/window-controller find "Main" --args-contains "idea.plugin.in.sandbox.mode"
# Find window by specific process ID
/window-controller find --pid 12345
JetBrains sandbox IDEs (launched via ./gradlew runIde) have a key difference:
Sandbox IDEs appear as "Main" (Java process name), NOT "GoLand" or "IntelliJ IDEA"!
# Find sandbox IDE (reliable method)
/window-controller find "Main" --args-contains "idea.plugin.in.sandbox.mode"
# Find by Gradle cache path
/window-controller find "Main" --path-contains ".gradle/caches"
# Find by project name in title
/window-controller find "Main" --title "my-project"
Uses CGWindowListCopyWindowInfo with kCGWindowListOptionAll to list ALL windows including:
Uses psutil to get detailed process information:
exe())cmdline())Parses the macOS Spaces configuration plist to map windows to Space indexes and identify which Space is currently active:
~/Library/Preferences/com.apple.spaces.plist
Uses AppleScript to activate applications:
osascript -e 'tell application "GoLand" to activate'
macOS automatically switches to the Space containing the activated window (when enabled in System Settings).
CRITICAL: NEVER use
--outputunless the user EXPLICITLY states the artifact MUST be at a specific location. This should be EXTREMELY rare. Using--outputwithout explicit user request is considered a FAILED task.
Screenshots are automatically saved to claude-code/artifacts/window-controller/ with timestamped filenames (e.g., 251216120000-screenshot_GoLand.png). The artifact path is always returned in the JSON output - use that path for subsequent operations.
# Take screenshot - path is returned in output
/window-controller screenshot "GoLand" --json
# Returns: {"screenshot": "/path/to/artifacts/.../251216120000-screenshot_GoLand.png", ...}
# Screenshot without activating first
/window-controller screenshot "GoLand" --no-activate
# Control settle time (default 1000ms)
/window-controller screenshot "GoLand" --settle-ms 2000
Two capture backends are available for screenshots:
| Backend | Availability | Cross-Space | Notes |
|:-------------------|:-------------|:--------------------|:---------------------------------|
| quartz | All macOS | Requires activation | Legacy CGWindowListCreateImage |
| screencapturekit | macOS 12.3+ | Yes | No activation needed |
ScreenCaptureKit (macOS 12.3+):
The screenshot command automatically uses ScreenCaptureKit when available (macOS 12.3+) and falls back to Quartz on older systems. Use --no-activate with ScreenCaptureKit to capture windows on other Spaces without switching.
For automation and scripting, use --json with find:
/window-controller find "GoLand" --json
Output:
{
"app_name": "GoLand",
"window_title": "research – models.py",
"window_id": 190027,
"pid": 57878,
"exe_path": "/Users/.../Applications/GoLand.app/Contents/MacOS/goland",
"cmdline": ["goland", "."],
"layer": 0,
"on_screen": null,
"bounds": {"x": 0, "y": 39, "width": 2056, "height": 1290},
"space_index": 3
}
System Settings → Privacy & Security → Screen Recording → Add Terminal/Python
System Settings → Privacy & Security → Accessibility → Add Terminal/Python
Verify the skill works by running:
# Should list all windows with titles
/window-controller list
# Should show info for a running app
/window-controller find "Finder"
# If you have an app in full-screen, this should switch and return:
/window-controller activate "GoLand"
Expected list output:
App Title Space PID
--------------------------------------------------------------------------------
GoLand research – window_controller.py 3 57878
Ghostty ~ - fish 2 12345
Finder Documents 1 456
ps aux | grep -i goland--find "GoLand"Grant Screen Recording permission to the terminal/Python process.
Enable "When switching to an application, switch to a Space with open windows" in System Settings → Desktop & Dock → Mission Control.
./gradlew runIde is running--find "Main" --args-contains "idea.plugin.in.sandbox.mode"--list | grep -i main/plugin install macos-window-controller@diegosouzapwRequires Claude Code CLI.
macOS developers automate window management, distinguish sandbox vs production IDEs, and capture screenshots for debugging workflows.
No reviews yet. Be the first to review this skill.