Customize macOS SwiftUI windows and scene behavior. Use when tuning window chrome, drag regions, placement, restoration, launch behavior, or borderless windows.
npx skills add https://github.com/openai/plugins --skill window-management
Use this skill to tailor each SwiftUI window to its job. Start by identifying
which scene owns the window (Window, WindowGroup, or a dedicated utility
scene), then customize the toolbar/title area, background material, resize and
restoration behavior, and initial or zoomed placement.
Prefer scene and window modifiers over ad hoc AppKit bridges when SwiftUI offers
the behavior directly. Keep each window purpose-built: a main browser window, an
About window, and a media player window usually want different chrome,
resizability, restoration, and placement rules.
These APIs are macOS 15+ SwiftUI window/scene customizations. For older
deployment targets, expect to use more AppKit bridging or availability guards.
main app navigation, inspector/detail utility, About/support window, media
playback window, welcome window, or a borderless custom surface.
still has a usable drag region.
resize expectations, and whether the window should appear at launch.
behavior when content and display size matter.
build-run-debug to verify the result ina real foreground .app bundle.
appkit-interopfor a narrow NSWindow bridge rather than spreading AppKit through the view
tree.
.toolbar(removing: .title) when the window title should stay associatedwith the window for accessibility and menus, but not be visibly drawn in the
title bar.
.toolbarBackgroundVisibility(.hidden, for: .windowToolbar) when largemedia or hero content should visually extend to the top edge of the window.
title and toolbar background. If the toolbar should disappear entirely, use
.toolbarVisibility(.hidden, for: .windowToolbar) instead.
layering new SwiftUI toolbar APIs on top.
still use it for accessibility and menu items. These are visual changes only.
WindowDragGesture() to extend the draggable area into your content.
that does not steal gestures from real controls.
between the video content and the controls so AVKit or transport controls keep
receiving input.
.allowsWindowActivationEvents(true) so clickingand immediately dragging a background window still activates and moves it.
.containerBackground(.thickMaterial, for: .window) when a utility windowor About window should replace the default window background with a subtle
frosted material.
colors.
is part of the design.
.windowMinimizeBehavior(.disabled) for always-reachable utility windowssuch as a custom About window where minimizing adds little value.
the window's content has one intended size.
.restorationBehavior(.disabled) for windows that should not reopen onnext launch, such as About panels, transient support/info windows, or
first-run welcome surfaces.
reopening prior size and position is desirable.
setting. Use restorationBehavior(...) only when a specific window should
intentionally opt into or out of that system behavior.
.defaultLaunchBehavior(.presented) for windows that should appear firston launch, such as a welcome window, and choose that behavior intentionally
rather than relying on side effects from scene creation order.
.defaultWindowPlacement { content, context in ... } to control theinitial size and optional position of newly opened windows.
content.sizeThatFits(.unspecified) to getthe content's ideal size.
context.defaultDisplay.visibleRect to get the display's usable regionafter accounting for the menu bar and Dock.
WindowPlacement(size: size) with a size clamped to the visible rectwhen media or document content may be larger than the display. If no position
is provided, the window is centered by default.
.windowIdealPlacement { content, context in ... } to control whathappens when the user chooses Zoom from the Window menu or Option-clicks the
green toolbar button. For media windows, preserve aspect ratio and grow to the
largest size that fits the display.
player windows or document windows from content dimensions.
.windowStyle(.plain) for borderless or highly custom chrome windows, butmake sure the content still provides a clear drag/move affordance and visible
context.
standard titlebar affordances is worth the custom presentation.
the window feel invisible or hard to move.
For concrete window modifier examples, read references/api-snippets.md.
menus.
or window control placement.
support click-then-drag activation from the background.
from the user's system-wide setting.
content.sizeThatFits(.unspecified) andcontext.defaultDisplay.visibleRect when content/display size matters.
.toolbar(removing: .title) just to hide a title you forgot to set.Keep the underlying window title meaningful.
lost drag affordance.
user explicitly wants a fresh-start app every launch.
player windows.
NSWindow mutation before checking whether.windowMinimizeBehavior, .restorationBehavior, .defaultWindowPlacement,
.windowIdealPlacement, .windowStyle, or .defaultLaunchBehavior already
solve the problem.
swiftui-patterns for broader scene, commands, settings, sidebar,and inspector architecture.
liquid-glass when the main question is modern macOS visual treatment,Liquid Glass, or system material adoption.
appkit-interop if a custom window behavior truly requires NSWindow,NSPanel, or responder-chain control.
build-run-debug to launch and verify the resulting windows.Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Query the CELLxGENE Census (61M+ cells) programmatically. Use when you need expression data across tissues, diseases, or cell types from the largest curated single-cell atlas. Best for population-scale queries, reference atlas comparisons. For analyzing your own data use scanpy or scvi-tools.
Take openai/window-management from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.