Desktop Window Layout Architect
Make desktop applications feel like they belong on a real operating system, not like web cards trapped in draggable divs.
When to Use
✅ Use for:
- Tauri, Electron, WinUI, SwiftUI, or hybrid desktop shells that feel spatially wrong.
- Multi-surface apps with a main canvas plus navigation, inspectors, logs, results, or task artifacts.
- Overlapping windows, ugly default placement, brittle tiling, or restore/maximize behavior that feels fake.
- Decisions about split view vs auxiliary window vs floating panel vs modal sheet.
- Fixing title bar density, command placement, and “too much chrome, not enough field.”
❌ NOT for:
- Mobile navigation patterns, tab bars, or handset-only adaptive layouts.
- Landing pages, dashboards in the browser, or ordinary responsive marketing surfaces.
- Pure component styling where the problem is typography/color/spacing, not window or pane behavior.
- Backend orchestration, IPC wiring, or packaging/signing issues that do not affect desktop interaction design.
Fast Signals
Use these to pull the relevant geometry and shell clues into context before deciding anything.
Window Management Files
!`rg -n "openWindow|snapWindow|tileWindows|cascadeWindows|arrangeReviewWorkspace|WindowFrame|Titlebar|Taskbar|SplitView|TwoPane|NavigationView" "${ARGUMENTS:-.}" 2>/dev/null | head -n 120`
Geometry and Restore Signals
!`rg -n "innerHeight|innerWidth|defaultSize|minSize|restoreBounds|window-state|isMaximized|position|size" "${ARGUMENTS:-.}" 2>/dev/null | head -n 120`
Support Files
Load only the files that match the current blocking question.
| File |
Load when |
Purpose |
references/INDEX.md |
First |
Decide which deep-dive file to read instead of loading everything |
references/platform-principles.md |
When grounding decisions in OS conventions |
Apple HIG, Windows Fluent, and Tauri state-restoration synthesis |
references/surface-selection.md |
When deciding split pane vs panel vs auxiliary window |
Surface taxonomy and role-based routing |
references/geometry-and-placement.md |
When defining default sizes, mins, snap safety, or restore rules |
Geometry contract and placement heuristics |
references/chrome-density-and-commanding.md |
When the UI feels crowded or command-heavy |
Title bars, gutters, bottom bars, action placement |
references/workspace-presets.md |
When designing review, compare, authoring, or inspect modes |
Role-aware workspace recipes |
references/implementation-patterns.md |
When translating guidance into code |
Tauri/Electron/WinUI/SwiftUI implementation notes |
scripts/preflight.sh |
Before any repo-specific audit |
Read-only inspection of likely shell/layout files |
scripts/audit_window_layout.py |
When you want a fast static audit |
Emits findings plus JSON, Markdown, or HTML reports about geometry, tiling, snap safety, and restore behavior |
templates/layout-audit-template.md |
When returning a structured review |
Reusable final answer skeleton |
templates/window-registry-template.ts |
When designing a new window registry or refactor |
Role- and mode-aware config template |
templates/workspace-preset-template.json |
When defining breakpoints and workspace presets |
Serializable layout contract |
examples/windags-review-workspace.md |
When auditing a graph + inspector + artifact app |
Concrete before/after reasoning |
examples/surface-selection-scenarios.md |
When the right surface is unclear |
Trigger examples that provoke different surface choices |
agents/desktop-window-layout-architect-worker.md |
When a clean-room critique or parallel audit helps |
Narrow worker for isolated layout review |
Output Contract
Unless the user explicitly asks for something narrower, structure the answer like this:
- Surface Map — what surfaces should exist and their roles
- Geometry Contract — default size, min size, collapse rules, snap safety
- Placement Contract — first-open placement, restore behavior, parent-relative rules
- Chrome and Commanding — what belongs in title bars, panes, bottom bars, and menus
- Workspace Presets — how the layout should adapt across wide / medium / narrow desktop widths
- Implementation Moves — the smallest code changes that produce the biggest improvement
Use templates/layout-audit-template.md when emitting this structure verbatim.
Core Process
flowchart TD
A[Identify app type and current pain] --> B{Same task context?}
B -->|Yes| C[Prefer panes inside one primary window]
B -->|No| D{Transient or persistent?}
D -->|Transient| E[Modal sheet or popover]
D -->|Persistent task area| F[Auxiliary window]
C --> G{Supplemental live selection details?}
G -->|Yes| H[Trailing inspector or inspector panel]
G -->|No| I[Sidebar + content or two-pane layout]
H --> J[Define geometry contract]
I --> J
F --> J
E --> J
J --> K[Define placement and restore rules]
K --> L[Trim chrome and command duplication]
L --> M[Validate against wide, medium, narrow desktop widths]
M --> N[Ship role-aware presets instead of fixed percentages]
Step 1: Classify the Surface Model
Decide whether the problem belongs to:
- a primary window with multiple panes,
- an auxiliary window dedicated to one task,
- a floating panel like an inspector,
- or a modal/sheet for short blocking work.
Rules:
- If users need to read two or three related regions together, default to a single primary window with panes, not multiple floating windows.
- If a surface tracks the current selection and updates live, prefer a trailing inspector or inspector panel.
- If a surface represents a separate durable task with its own lifecycle, use an auxiliary window.
- If the interaction is short and blocking, use a sheet/popover/modal, not a whole extra window.
Step 2: Map Roles Before Coordinates
Assign each surface a role:
navigation
canvas
detail
inspector
artifact
console
utility
Then rank them:
- Field-first: canvas/detail/artifact that benefits from visual area
- Supportive: navigation/inspector/console
- Transient: utility/panel/modal
Never choose percentages before roles. Percentages are outputs of role priority, not the other way around.
Step 3: Write a Geometry Contract
Define, per surface:
- default size,
- minimum content size,
- minimum snap-safe width,
- collapse priority,
- and whether it can hide.
Hard rules:
- On Windows, keep the minimum width of a snappable primary window at 500 epx or less, and preferably around 330 epx when possible.
- If panes are resizable, set mins and maxes that keep dividers usable.
- If the sum of pane minimums does not fit, change layout mode. Do not enforce mins after a percentage split and let panes overlap.
- Keep the primary content area dominant. Tooling should compress or hide before the main canvas does.
Step 4: Write a Placement Contract
Define:
- first-open placement,
- reopen / restore behavior,
- parent-relative placement for auxiliary surfaces,
- clamp behavior when viewport/display changes,
- and maximize/snap restore semantics.
Rules:
- First launch can center a window. After that, restore prior normal bounds.
- Auxiliary windows should open near the invoking parent without obscuring the point of origin.
- Floating panels should not masquerade as normal documents.
- Keep at least a draggable title region visible when clamping a moved window back onscreen.
- Model explicit window modes such as
normal, maximized, snapped-left, snapped-right, tiled, with restoreBounds.
Step 5: Reduce Chrome Before Rearranging Content
Check whether the app is losing field to shell chrome:
- title bars too tall,
- duplicate headings inside panes,
- oversized caption buttons,
- permanent bottom bars,
- or navigation plus commanding stacked redundantly.
Prefer:
- a single meaningful window title,
- thin dividers,
- toolbar/title integration,
- and command placement near the relevant pane.
Avoid putting critical actions in bottom bars on macOS-style desktop apps.
Step 6: Design Workspace Presets
Instead of one fixed arrangement, define at least three desktop-width regimes:
- Wide: persistent sidebar + canvas + inspector/artifact
- Medium: sidebar or inspector becomes collapsible/overlay
- Narrow desktop: single primary pane plus toggleable support pane or tabs
The goal is not generic “responsiveness.” The goal is preserving task comprehension as width changes.
Step 7: Validate Like a Desktop Product
Validate at minimum:
- 1280×720
- 1440×900
- 1728×1117 or similar high-density laptop
- ultrawide / dual-monitor assumptions if relevant
Check:
- no overlap after minimum sizes apply,
- snap works,
- restore works,
- no content-critical bottom bar is hidden,
- and auxiliary surfaces do not steal focus unnecessarily.
Anti-Patterns
Anti-Pattern: Every Problem Gets Another Window
Novice: "If the screen feels crowded, split it into more floating windows."
Expert: Related work should usually stay inside one primary window with panes. New windows are for distinct task areas, not for every supportive region.
Timeline: Apple’s current HIG explicitly pushes supplementary information toward split views and inspectors before new windows; Windows pushes adaptive panes and navigation surfaces before ad hoc floaters.
Anti-Pattern: Chrome Is Free
Novice: "A 40px child title bar, thick borders, giant controls, and an always-on bottom action bar are fine."
Expert: Desktop users will trade ornamental chrome for field. Keep title bars draggable, legible, and system-like, but aggressively protect the content area.
Timeline: Windows 11 title bars remain concise and system-integrated; Apple guidance emphasizes content-first windows and warns against hiding critical actions in bottom bars.
Anti-Pattern: Percentages First, Minimums Later
Novice: "Split the screen 66/34 and 58/42, then clamp each pane to its minimum."
Expert: That causes overlap. Start from minimum viable pane sizes and role priority. If the floor sum does not fit, switch to a different preset.
Timeline: Mature desktop shells moved toward breakpoint- and mode-based arrangements because static percentages fail under resize and snap.
Anti-Pattern: Static Cascade Equals Window Management
Novice: "New windows can open at x + 24, y + 24; that’s enough."
Expert: Window managers need restore bounds, snap modes, clamp-on-move, viewport recovery, and parent-relative placement. Cascade is an escape hatch, not the whole policy.
Timeline: Users now expect snap layouts, restore semantics, and remembered bounds out of the box on both Windows and modern desktop frameworks like Tauri.
Anti-Pattern: Inspector as a Mini Document Window
Novice: "The inspector can minimize, live forever in the task list, and behave like a peer document."
Expert: Inspectors are supplemental. They either live in a trailing pane or behave like panels with lighter lifecycle semantics.
Timeline: Apple’s panel guidance is explicit: panels are not documents, generally should not minimize, and should appear/disappear with app relevance.
Worked Examples
Example 1: Review Workspace for a Graph App
Load examples/windags-review-workspace.md.
Use it when the app has:
- a graph/canvas,
- a details inspector,
- an exported artifact or log,
- and currently opens them as overlapping windows.
Example 2: Choosing the Right Supplemental Surface
Load examples/surface-selection-scenarios.md.
Use it when the team is arguing about:
- pane vs panel,
- panel vs auxiliary window,
- or modal vs persistent surface.
Quality Gates
- The app has a named surface map before anyone debates percentages.
- Every primary or auxiliary window has a default size, minimum content size, and restore policy.
- Snap-safe surfaces support a minimum width of 500 epx or less on Windows; target 330 epx where practical.
- No fixed workspace preset can overlap once minimum sizes are applied.
- Title bars remain draggable and system legible; the app does not fake caption behavior badly.
- The primary canvas/content region retains visual priority over inspectors and utilities.
- Related content is unified into split panes before additional windows are introduced.
- Bottom bars never contain mission-critical primary actions unless there is a strong, explicit reason.
- The layout has explicit wide / medium / narrow desktop behavior.
- Restored windows reappear onscreen even after display or viewport changes.
NOT-FOR Boundaries
Do not use this skill when:
- the problem is just CSS polish inside a single page,
- the product has no multi-surface behavior,
- or the user needs mobile-first interaction patterns instead of desktop workspace ergonomics.
If the request is mostly about color, typography, or visual taste, pair this with a design skill after the surface model is fixed.
1---2name: desktop-window-layout-architect3description: Design desktop window systems that feel native on macOS and Windows: split views, inspectors, auxiliary windows, tiling, snap-safe sizes, default placement, and chrome density. Use when a Tauri/Electron/WinUI/SwiftUI app feels awkward, overlapping, over-chromed, or generic, or when you need a real geometry contract for multiple surfaces. NOT for mobile layouts, marketing pages, or CSS-only component styling without multi-window or multi-pane behavior.4license: Apache-2.05---67# Desktop Window Layout Architect89Make desktop applications feel like they belong on a real operating system, not like web cards trapped in draggable divs.1011## When to Use1213✅ **Use for**:14- Tauri, Electron, WinUI, SwiftUI, or hybrid desktop shells that feel spatially wrong.15- Multi-surface apps with a main canvas plus navigation, inspectors, logs, results, or task artifacts.16- Overlapping windows, ugly default placement, brittle tiling, or restore/maximize behavior that feels fake.17- Decisions about split view vs auxiliary window vs floating panel vs modal sheet.18- Fixing title bar density, command placement, and “too much chrome, not enough field.”1920❌ **NOT for**:21- Mobile navigation patterns, tab bars, or handset-only adaptive layouts.22- Landing pages, dashboards in the browser, or ordinary responsive marketing surfaces.23- Pure component styling where the problem is typography/color/spacing, not window or pane behavior.24- Backend orchestration, IPC wiring, or packaging/signing issues that do not affect desktop interaction design.2526## Fast Signals2728Use these to pull the relevant geometry and shell clues into context before deciding anything.2930### Window Management Files31```bash32!`rg -n "openWindow|snapWindow|tileWindows|cascadeWindows|arrangeReviewWorkspace|WindowFrame|Titlebar|Taskbar|SplitView|TwoPane|NavigationView" "${ARGUMENTS:-.}" 2>/dev/null | head -n 120`33```3435### Geometry and Restore Signals36```bash37!`rg -n "innerHeight|innerWidth|defaultSize|minSize|restoreBounds|window-state|isMaximized|position|size" "${ARGUMENTS:-.}" 2>/dev/null | head -n 120`38```3940## Support Files4142Load only the files that match the current blocking question.4344| File | Load when | Purpose |45|---|---|---|46| `references/INDEX.md` | First | Decide which deep-dive file to read instead of loading everything |47| `references/platform-principles.md` | When grounding decisions in OS conventions | Apple HIG, Windows Fluent, and Tauri state-restoration synthesis |48| `references/surface-selection.md` | When deciding split pane vs panel vs auxiliary window | Surface taxonomy and role-based routing |49| `references/geometry-and-placement.md` | When defining default sizes, mins, snap safety, or restore rules | Geometry contract and placement heuristics |50| `references/chrome-density-and-commanding.md` | When the UI feels crowded or command-heavy | Title bars, gutters, bottom bars, action placement |51| `references/workspace-presets.md` | When designing review, compare, authoring, or inspect modes | Role-aware workspace recipes |52| `references/implementation-patterns.md` | When translating guidance into code | Tauri/Electron/WinUI/SwiftUI implementation notes |53| `scripts/preflight.sh` | Before any repo-specific audit | Read-only inspection of likely shell/layout files |54| `scripts/audit_window_layout.py` | When you want a fast static audit | Emits findings plus JSON, Markdown, or HTML reports about geometry, tiling, snap safety, and restore behavior |55| `templates/layout-audit-template.md` | When returning a structured review | Reusable final answer skeleton |56| `templates/window-registry-template.ts` | When designing a new window registry or refactor | Role- and mode-aware config template |57| `templates/workspace-preset-template.json` | When defining breakpoints and workspace presets | Serializable layout contract |58| `examples/windags-review-workspace.md` | When auditing a graph + inspector + artifact app | Concrete before/after reasoning |59| `examples/surface-selection-scenarios.md` | When the right surface is unclear | Trigger examples that provoke different surface choices |60| `agents/desktop-window-layout-architect-worker.md` | When a clean-room critique or parallel audit helps | Narrow worker for isolated layout review |6162## Output Contract6364Unless the user explicitly asks for something narrower, structure the answer like this:65661. **Surface Map** — what surfaces should exist and their roles672. **Geometry Contract** — default size, min size, collapse rules, snap safety683. **Placement Contract** — first-open placement, restore behavior, parent-relative rules694. **Chrome and Commanding** — what belongs in title bars, panes, bottom bars, and menus705. **Workspace Presets** — how the layout should adapt across wide / medium / narrow desktop widths716. **Implementation Moves** — the smallest code changes that produce the biggest improvement7273Use `templates/layout-audit-template.md` when emitting this structure verbatim.7475## Core Process7677```mermaid78flowchart TD79 A[Identify app type and current pain] --> B{Same task context?}80 B -->|Yes| C[Prefer panes inside one primary window]81 B -->|No| D{Transient or persistent?}82 D -->|Transient| E[Modal sheet or popover]83 D -->|Persistent task area| F[Auxiliary window]84 C --> G{Supplemental live selection details?}85 G -->|Yes| H[Trailing inspector or inspector panel]86 G -->|No| I[Sidebar + content or two-pane layout]87 H --> J[Define geometry contract]88 I --> J89 F --> J90 E --> J91 J --> K[Define placement and restore rules]92 K --> L[Trim chrome and command duplication]93 L --> M[Validate against wide, medium, narrow desktop widths]94 M --> N[Ship role-aware presets instead of fixed percentages]95```9697### Step 1: Classify the Surface Model9899Decide whether the problem belongs to:100101- a **primary window** with multiple panes,102- an **auxiliary window** dedicated to one task,103- a **floating panel** like an inspector,104- or a **modal/sheet** for short blocking work.105106Rules:107108- If users need to read two or three related regions together, default to a **single primary window with panes**, not multiple floating windows.109- If a surface tracks the current selection and updates live, prefer a **trailing inspector** or **inspector panel**.110- If a surface represents a separate durable task with its own lifecycle, use an **auxiliary window**.111- If the interaction is short and blocking, use a **sheet/popover/modal**, not a whole extra window.112113### Step 2: Map Roles Before Coordinates114115Assign each surface a role:116117- `navigation`118- `canvas`119- `detail`120- `inspector`121- `artifact`122- `console`123- `utility`124125Then rank them:126127- **Field-first**: canvas/detail/artifact that benefits from visual area128- **Supportive**: navigation/inspector/console129- **Transient**: utility/panel/modal130131Never choose percentages before roles. Percentages are outputs of role priority, not the other way around.132133### Step 3: Write a Geometry Contract134135Define, per surface:136137- default size,138- minimum content size,139- minimum snap-safe width,140- collapse priority,141- and whether it can hide.142143Hard rules:144145- On Windows, keep the minimum width of a snappable primary window at **500 epx or less**, and preferably around **330 epx** when possible.146- If panes are resizable, set mins and maxes that keep dividers usable.147- If the sum of pane minimums does not fit, **change layout mode**. Do not enforce mins after a percentage split and let panes overlap.148- Keep the primary content area dominant. Tooling should compress or hide before the main canvas does.149150### Step 4: Write a Placement Contract151152Define:153154- first-open placement,155- reopen / restore behavior,156- parent-relative placement for auxiliary surfaces,157- clamp behavior when viewport/display changes,158- and maximize/snap restore semantics.159160Rules:161162- **First launch** can center a window. **After that, restore prior normal bounds**.163- Auxiliary windows should open near the invoking parent without obscuring the point of origin.164- Floating panels should not masquerade as normal documents.165- Keep at least a draggable title region visible when clamping a moved window back onscreen.166- Model explicit window modes such as `normal`, `maximized`, `snapped-left`, `snapped-right`, `tiled`, with `restoreBounds`.167168### Step 5: Reduce Chrome Before Rearranging Content169170Check whether the app is losing field to shell chrome:171172- title bars too tall,173- duplicate headings inside panes,174- oversized caption buttons,175- permanent bottom bars,176- or navigation plus commanding stacked redundantly.177178Prefer:179180- a single meaningful window title,181- thin dividers,182- toolbar/title integration,183- and command placement near the relevant pane.184185Avoid putting critical actions in bottom bars on macOS-style desktop apps.186187### Step 6: Design Workspace Presets188189Instead of one fixed arrangement, define at least three desktop-width regimes:190191- **Wide**: persistent sidebar + canvas + inspector/artifact192- **Medium**: sidebar or inspector becomes collapsible/overlay193- **Narrow desktop**: single primary pane plus toggleable support pane or tabs194195The goal is not generic “responsiveness.” The goal is **preserving task comprehension** as width changes.196197### Step 7: Validate Like a Desktop Product198199Validate at minimum:200201- 1280×720202- 1440×900203- 1728×1117 or similar high-density laptop204- ultrawide / dual-monitor assumptions if relevant205206Check:207208- no overlap after minimum sizes apply,209- snap works,210- restore works,211- no content-critical bottom bar is hidden,212- and auxiliary surfaces do not steal focus unnecessarily.213214## Anti-Patterns215216### Anti-Pattern: Every Problem Gets Another Window217218**Novice**: "If the screen feels crowded, split it into more floating windows."219**Expert**: Related work should usually stay inside one primary window with panes. New windows are for distinct task areas, not for every supportive region.220**Timeline**: Apple’s current HIG explicitly pushes supplementary information toward split views and inspectors before new windows; Windows pushes adaptive panes and navigation surfaces before ad hoc floaters.221222### Anti-Pattern: Chrome Is Free223224**Novice**: "A 40px child title bar, thick borders, giant controls, and an always-on bottom action bar are fine."225**Expert**: Desktop users will trade ornamental chrome for field. Keep title bars draggable, legible, and system-like, but aggressively protect the content area.226**Timeline**: Windows 11 title bars remain concise and system-integrated; Apple guidance emphasizes content-first windows and warns against hiding critical actions in bottom bars.227228### Anti-Pattern: Percentages First, Minimums Later229230**Novice**: "Split the screen 66/34 and 58/42, then clamp each pane to its minimum."231**Expert**: That causes overlap. Start from minimum viable pane sizes and role priority. If the floor sum does not fit, switch to a different preset.232**Timeline**: Mature desktop shells moved toward breakpoint- and mode-based arrangements because static percentages fail under resize and snap.233234### Anti-Pattern: Static Cascade Equals Window Management235236**Novice**: "New windows can open at `x + 24, y + 24`; that’s enough."237**Expert**: Window managers need restore bounds, snap modes, clamp-on-move, viewport recovery, and parent-relative placement. Cascade is an escape hatch, not the whole policy.238**Timeline**: Users now expect snap layouts, restore semantics, and remembered bounds out of the box on both Windows and modern desktop frameworks like Tauri.239240### Anti-Pattern: Inspector as a Mini Document Window241242**Novice**: "The inspector can minimize, live forever in the task list, and behave like a peer document."243**Expert**: Inspectors are supplemental. They either live in a trailing pane or behave like panels with lighter lifecycle semantics.244**Timeline**: Apple’s panel guidance is explicit: panels are not documents, generally should not minimize, and should appear/disappear with app relevance.245246## Worked Examples247248### Example 1: Review Workspace for a Graph App249250Load `examples/windags-review-workspace.md`.251252Use it when the app has:253254- a graph/canvas,255- a details inspector,256- an exported artifact or log,257- and currently opens them as overlapping windows.258259### Example 2: Choosing the Right Supplemental Surface260261Load `examples/surface-selection-scenarios.md`.262263Use it when the team is arguing about:264265- pane vs panel,266- panel vs auxiliary window,267- or modal vs persistent surface.268269## Quality Gates270271- The app has a named **surface map** before anyone debates percentages.272- Every primary or auxiliary window has a **default size**, **minimum content size**, and **restore policy**.273- Snap-safe surfaces support a minimum width of **500 epx or less** on Windows; target **330 epx** where practical.274- No fixed workspace preset can overlap once minimum sizes are applied.275- Title bars remain draggable and system legible; the app does not fake caption behavior badly.276- The primary canvas/content region retains visual priority over inspectors and utilities.277- Related content is unified into split panes before additional windows are introduced.278- Bottom bars never contain mission-critical primary actions unless there is a strong, explicit reason.279- The layout has explicit wide / medium / narrow desktop behavior.280- Restored windows reappear onscreen even after display or viewport changes.281282## NOT-FOR Boundaries283284Do not use this skill when:285286- the problem is just CSS polish inside a single page,287- the product has no multi-surface behavior,288- or the user needs mobile-first interaction patterns instead of desktop workspace ergonomics.289290If the request is mostly about color, typography, or visual taste, pair this with a design skill after the surface model is fixed.