Use when creating a new project folder, starter pack, app scaffold, or agent-ready workspace — AGENTS.md, README, TASKS, DECISIONS, PROMPTS, an idempotent bootstrap script, and starter-pack modes.
中文简介正在准备中。当前显示原文说明。
Use when designing, reviewing, or implementing Apple-platform toolbars — current-screen actions vs sidebar navigation, one primary action per screen, overflow menus, protected destructive actions, and keyboard shortcuts.
中文简介正在准备中。当前显示原文说明。
实测评分 未实测
查看安装方法安装前可以查看交给 AI 代理的指令内容。
Use this skill when designing, reviewing, or implementing Apple-platform toolbars. It covers macOS window toolbars, SwiftUI .toolbar, iPadOS toolbars, iOS navigation bar actions, current-screen actions, search, filters, sort controls, export/share actions, inspector toggles, and command palette buttons.
Sidebar = navigation
Toolbar = actions for the current screen
Command palette = fast access to many commands
Context menu = secondary item-specific actions
A good toolbar answers:
What can I do on this screen right now?
Toolbar actions should change based on the selected screen.
Examples:
Projects screen:
- New Project
- Search
- Sort
- Filter
Active Runs screen:
- Stop
- Retry
- Clear Finished
- Search
Skills screen:
- New Skill
- Import
- Validate
- Search
Bad pattern:
Every screen always shows every action.
Leading:
- Sidebar toggle
- Back navigation
Center:
- Title
- Search
- Segmented controls
- View switchers
Trailing:
- Primary action
- Add button
- Share/export
- Inspector toggle
- More menu
Every screen should have one obvious main action.
Examples:
Projects → New Project
Skills → New Skill
Prompts → New Prompt
Reports → Export
Active Runs → Clear Finished or Stop All
If there are three primary buttons, none are primary.
Put less frequent actions into a More menu.
Menu {
Button("Sort") {}
Button("Filter") {}
Divider()
Button("Export") {}
} label: {
Label("More", systemImage: "ellipsis.circle")
}
Do not place destructive actions as prominent toolbar buttons unless they are core to the screen and safely reversible.
Better:
More menu → Delete Finished Runs… → confirmation dialog → undo support
Home:
- Primary: New Task
- Secondary: Search, Command Palette
Active Runs:
- Primary: Clear Finished or Stop All
- Secondary: Search, Filter, Inspector
Queue:
- Primary: Add Task
- Secondary: Reorder, Clear, Filter
Projects:
- Primary: New Project
- Secondary: Import, Sort, Search
Skills:
- Primary: New Skill
- Secondary: Import Skill, Validate, Search
Prompts:
- Primary: New Prompt
- Secondary: Duplicate, Export, Search
Files:
- Primary: Add Folder or Import
- Secondary: Reveal in Finder, Search, Sort
Notes:
- Primary: New Note
- Secondary: Search, Filter
Decisions:
- Primary: New Decision
- Secondary: Export, Search
Reports:
- Primary: Export
- Secondary: Date Picker, Search, Generate Report
Settings:
- Minimal or no toolbar actions
import SwiftUI
struct DetailScreen: View {
let section: AppSection
@State private var searchText = ""
@State private var showsInspector = false
var body: some View {
content
.navigationTitle(section.title)
.searchable(text: $searchText, placement: .toolbar)
.toolbar {
ToolbarItem(placement: .navigation) {
Button {
toggleSidebar()
} label: {
Label("Toggle Sidebar", systemImage: "sidebar.left")
}
}
ToolbarItem(placement: .principal) {
Text(section.title)
.font(.headline)
}
ToolbarItemGroup(placement: .primaryAction) {
primaryActionButton
Button {
showsInspector.toggle()
} label: {
Label("Inspector", systemImage: "sidebar.right")
}
.keyboardShortcut("i", modifiers: [.command])
moreMenu
}
}
}
@ViewBuilder
private var content: some View {
Text(section.title)
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
@ViewBuilder
private var primaryActionButton: some View {
switch section {
case .home:
Button { createTask() } label: { Label("New Task", systemImage: "plus") }
case .projects:
Button { createProject() } label: { Label("New Project", systemImage: "folder.badge.plus") }
case .skills:
Button { createSkill() } label: { Label("New Skill", systemImage: "sparkles") }
case .prompts:
Button { createPrompt() } label: { Label("New Prompt", systemImage: "text.badge.plus") }
case .reports:
Button { exportReport() } label: { Label("Export", systemImage: "square.and.arrow.up") }
default:
EmptyView()
}
}
private var moreMenu: some View {
Menu {
Button("Sort") {}
Button("Filter") {}
Divider()
Button("Open Command Palette") {}
} label: {
Label("More", systemImage: "ellipsis.circle")
}
}
private func toggleSidebar() {}
private func createTask() {}
private func createProject() {}
private func createSkill() {}
private func createPrompt() {}
private func exportReport() {}
}
⌘N New item for current screen
⌘F Search
⌘K Command palette
⌘, Settings
⌘R Refresh / rerun where appropriate
⌘I Toggle inspector
⌘1-⌘9 Jump to main sections
[ ] Every toolbar item applies to the current screen
[ ] Sidebar navigation is not duplicated
[ ] There is one obvious primary action
[ ] Secondary actions are in a More menu
[ ] Item-specific actions are in context menus
[ ] Destructive actions are protected
[ ] Search appears only where useful
[ ] SF Symbols are consistent
[ ] Labels are short
[ ] Keyboard shortcuts exist for common actions
[ ] VoiceOver labels are clear
[ ] Compact width is safe
Drop this into any coding agent (Claude Code, Codex, Cursor, …) to apply the skill:
Use the apple-hig-toolbars skill to redesign this app toolbar system.
Rules:
- Toolbar is for current-screen actions.
- Sidebar is for navigation.
- Do not duplicate sidebar items in the toolbar.
- Use SwiftUI .toolbar.
- Use ToolbarItem and ToolbarItemGroup.
- Use SF Symbols with semantic Label text.
- Keep one obvious primary action per screen.
- Move secondary actions into a More menu.
- Move item-specific actions into context menus.
- Protect destructive actions with confirmation.
- Add .searchable only where useful.
- Add keyboard shortcuts for common actions.
- Keep compact-width behavior safe.
After coding:
- List files changed.
- Explain toolbar structure per screen.
- List primary actions.
- List actions moved into More/context menus.
- Give manual test steps.
The toolbar feels native, calm, contextual, and useful.
It helps the current screen without becoming navigation or a dashboard.
还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
Use when creating a new project folder, starter pack, app scaffold, or agent-ready workspace — AGENTS.md, README, TASKS, DECISIONS, PROMPTS, an idempotent bootstrap script, and starter-pack modes.
中文简介正在准备中。当前显示原文说明。
Use when designing or implementing states for AI agent tasks, background jobs, local model runs, queues, and notifications — one shared set of states, only legal transitions, and a recovery path out of every failure.
中文简介正在准备中。当前显示原文说明。
Use when exposing app features to App Intents, Shortcuts, Siri, Spotlight, widgets, controls, or system actions — small safe AppIntents, AppShortcutsProvider, AppEnum/AppEntity, parameters, and open-vs-background behavior.
中文简介正在准备中。当前显示原文说明。
Use when designing, reviewing, or implementing a command-palette / ⌘K layer for an Apple-platform app — keyboard-first global search, ranked and grouped results, native floating panel, and protected destructive commands.
中文简介正在准备中。当前显示原文说明。
Use when designing or implementing empty, first-run, no-result, offline, error, or waiting states in Apple-platform apps — every empty state explains what is missing, why it matters, and what to do next.
中文简介正在准备中。当前显示原文说明。
Use when designing or implementing feedback, status, progress, alerts, errors, success states, and live activity indicators in Apple-platform apps — inline status, banners, alerts, notifications, and loading states.
中文简介正在准备中。当前显示原文说明。