Skip to content
cccskills
FreePublished on GitHub

apple-hig-toolbars

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.

The English summary is being prepared. Showing the original description.

Run score Not tested

See how to install

Files included (1)

  • SKILL.md7.3 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Apple HIG Toolbars

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.

Core rule

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?

Apple-style principles

1. Toolbars serve the current view

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.

2. Use familiar placement

Leading:
- Sidebar toggle
- Back navigation

Center:
- Title
- Search
- Segmented controls
- View switchers

Trailing:
- Primary action
- Add button
- Share/export
- Inspector toggle
- More menu

3. One primary action per screen

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.

4. Use menus for overflow

Put less frequent actions into a More menu.

Menu {
    Button("Sort") {}
    Button("Filter") {}
    Divider()
    Button("Export") {}
} label: {
    Label("More", systemImage: "ellipsis.circle")
}

5. Protect destructive actions

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

Recommended toolbar map for an agent-driven app

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

SwiftUI pattern

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() {}
}

Keyboard shortcuts

⌘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

Review checklist

[ ] 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

Prompt template

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.

Quality bar

The toolbar feels native, calm, contextual, and useful.
It helps the current screen without becoming navigation or a dashboard.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

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.

The English summary is being prepared. Showing the original description.

aka-kika/akakika-skills11Updated Sep 12, 2026

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.

The English summary is being prepared. Showing the original description.

aka-kika/akakika-skills11Updated Sep 12, 2026

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.

The English summary is being prepared. Showing the original description.

aka-kika/akakika-skills11Updated Sep 12, 2026

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.

The English summary is being prepared. Showing the original description.

aka-kika/akakika-skills11Updated Sep 12, 2026

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.

The English summary is being prepared. Showing the original description.

aka-kika/akakika-skills11Updated Sep 12, 2026

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.

The English summary is being prepared. Showing the original description.

aka-kika/akakika-skills11Updated Sep 12, 2026

See all skills by aka-kika

Report a problem with this skill