files/home/.claude/skills/aerospace/SKILL.md
This skill should be used when users want to manage windows on macOS using AeroSpace, an i3-like tiling window manager. Use for both ad-hoc window management requests ("move this window to workspace 2", "tile these windows") and scripting tasks (writing shell scripts, automations, or config modifications). Use when users mention "aerospace", "window management", "tiling", "workspaces", or ask about managing windows on macOS.
npx skillsauth add nateberkopec/dotfiles aerospaceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill was created with AeroSpace version 0.20.2-Beta. Before executing commands or writing scripts, verify the installed version:
aerospace --version
If the version differs significantly, consult aerospace --help and individual command help to verify syntax hasn't changed.
AeroSpace is an i3-like tiling window manager for macOS. It provides:
The aerospace CLI is the primary interface for both interactive use and scripting.
AeroSpace organizes windows in a tree structure inspired by i3:
tiles or accordionhorizontal or verticalCombined layouts: h_tiles, v_tiles, h_accordion, v_accordion
main, secondary, monitor index (1-based), or regex patternsIMPORTANT: Always use help commands to get exact syntax. This skill teaches concepts; the CLI teaches exact usage.
# List all commands
aerospace --help
# Get help for any command
aerospace <command> --help
# Examples
aerospace focus --help
aerospace list-windows --help
aerospace workspace --help
# Focus window in direction
aerospace focus left|down|up|right
# Focus by window ID
aerospace focus --window-id <id>
# Focus next/prev in depth-first order
aerospace focus dfs-next|dfs-prev
# Move focused window in direction
aerospace move left|down|up|right
# Move window to workspace
aerospace move-node-to-workspace <workspace>
aerospace move-node-to-workspace next|prev
# Move window to monitor
aerospace move-node-to-monitor left|right|next|prev
# Switch to workspace
aerospace workspace <name>
aerospace workspace next|prev
# Move workspace to different monitor
aerospace move-workspace-to-monitor next|prev
# Change layout (multiple args = find first non-current and apply)
aerospace layout tiles|accordion
aerospace layout horizontal|vertical
aerospace layout h_tiles|v_tiles|h_accordion|v_accordion
aerospace layout floating|tiling
# Toggle fullscreen
aerospace fullscreen
aerospace fullscreen on|off
# Join focused window with neighbor under common parent
aerospace join-with left|down|up|right
# Resize windows
aerospace resize smart|width|height +|-<pixels>
# Balance all window sizes
aerospace balance-sizes
# Flatten workspace tree (reset splits)
aerospace flatten-workspace-tree
# List windows
aerospace list-windows --workspace focused
aerospace list-windows --all
aerospace list-windows --monitor focused
aerospace list-windows --format '%{window-id} %{app-name}'
# List workspaces
aerospace list-workspaces --all
aerospace list-workspaces --monitor focused --empty no
# List monitors
aerospace list-monitors
# List running apps (useful for on-window-detected)
aerospace list-apps
# Get config values
aerospace config --get mode.main.binding --json
aerospace config --config-path
Query commands support --format with interpolation:
# Common variables
%{window-id} # Window unique ID
%{window-title} # Window title
%{app-name} # Application name
%{app-bundle-id} # Application bundle ID (e.g., com.apple.Safari)
%{workspace} # Workspace name
%{monitor-id} # Monitor index
# JSON output for scripting
aerospace list-windows --workspace focused --json
# Focus Safari window
set window_id (aerospace list-windows --all --format '%{window-id} %{app-name}' | grep Safari | head -1 | cut -d' ' -f1)
and aerospace focus --window-id $window_id
# Move all Chrome windows to workspace W
for id in (aerospace list-windows --all --app-bundle-id com.google.Chrome --format '%{window-id}')
aerospace move-node-to-workspace --window-id $id W
end
aerospace list-workspaces --monitor focused --empty no | aerospace workspace next
set current_ws (aerospace list-workspaces --focused)
set window_count (aerospace list-windows --workspace focused --count)
echo "Workspace $current_ws has $window_count windows"
Config location: ~/.aerospace.toml or ~/.config/aerospace/aerospace.toml
Binding Modes: Like vim modes. main is default. Switch modes with mode <mode-name>.
[mode.main.binding]
alt-h = 'focus left'
alt-r = 'mode resize'
[mode.resize.binding]
minus = 'resize smart -50'
esc = 'mode main'
on-window-detected Callbacks: Auto-assign apps to workspaces:
[[on-window-detected]]
if.app-id = 'com.apple.Safari'
run = 'move-node-to-workspace W'
Workspace-to-Monitor Assignment:
[workspace-to-monitor-force-assignment]
1 = 'main'
2 = 'secondary'
exec-on-workspace-change: For bar integration (e.g., Sketchybar):
exec-on-workspace-change = ['/bin/bash', '-c',
'sketchybar --trigger aerospace_workspace_change FOCUSED=$AEROSPACE_FOCUSED_WORKSPACE'
]
For on-window-detected, you need bundle IDs:
# List all running apps with bundle IDs
aerospace list-apps
# Or use mdls
mdls -name kMDItemCFBundleIdentifier -r /Applications/Safari.app
When users ask for window management tasks, translate to aerospace commands:
| User Request | Command |
|-------------|---------|
| "Move this window right" | aerospace move right |
| "Focus the window above" | aerospace focus up |
| "Send to workspace 3" | aerospace move-node-to-workspace 3 |
| "Go to workspace mail" | aerospace workspace mail |
| "Make this fullscreen" | aerospace fullscreen |
| "Float this window" | aerospace layout floating |
| "Tile horizontally" | aerospace layout h_tiles |
| "Stack windows" | aerospace layout v_accordion |
| "Swap with window on right" | aerospace move right (move swaps in tiles) |
| "Resize larger" | aerospace resize smart +50 |
| "Which workspace am I on?" | aerospace list-workspaces --focused |
| "What windows are here?" | aerospace list-windows --workspace focused |
# Debug window detection issues
aerospace debug-windows
# Check loaded config path
aerospace config --config-path
# List current binding modes
aerospace list-modes
# Show exec environment variables
aerospace list-exec-env-vars
# Reload config after changes
aerospace reload-config
Keys not working: Check for conflicts with other global hotkey apps (skhd, Karabiner, Raycast)
Windows not tiling: Some windows are detected as dialogs. Use on-window-detected with run = 'layout tiling' to force
Multi-monitor issues: Disable "Displays have separate Spaces" in System Settings for better stability
Hidden windows visible: Arrange monitors so every monitor has free space in bottom corners
man aerospace-<command> (if installed via Homebrew)/Applications/AeroSpace.app/Contents/Resources/default-config.tomlcp /Applications/AeroSpace.app/Contents/Resources/default-config.toml ~/.aerospace.tomltools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.